2012-04-13 2 views
0

ServiceMix (Fuse)에서 실행되는 Camel Jetty 구성 요소를 사용하여 일련의 웹 서비스를 노출했습니다. 뭔가 같이 :Camel + Jetty 경로마다 다른 SSL 인증서 사용

<route> 
     <from uri="jetty:http://0.0.0.0:25100/service1"/> 
     ... 
</route>  
<route> 
     <from uri="jetty:http://0.0.0.0:25100/service2"/> 
     ... 
</route> 

나는 HTTPS/SSL을 사용하도록 변경할 수 있도록하려면하지만 각 경로에 대해 서로 다른 키/인증서를 사용할 수 있어야합니다. Jetty Component 문서를 살펴본 결과 SSL을 사용하도록 Jetty 구성 요소를 전역으로 구성하는 방법을 설명하는 데 알맞은 작업이 있지만 각기 다른 경로에 대해 다른 인증서를 지정하는 방법이없는 것 같습니까? Jetty Component Documentation :

<bean id="jetty" class="org.apache.camel.component.jetty.JettyHttpComponent"> 
    <property name="sslSocketConnectorProperties"> 
     <properties> 
      <property name="password"value="..."/> 
      <property name="keyPassword"value="..."/> 
      <property name="keystore"value="..."/> 
      <property name="needClientAuth"value="..."/> 
      <property name="truststore"value="..."/> 
     </properties> 
    </property> 
</bean> 

경로마다 다른 인증서를 사용할 수 있습니까?

+0

부두가 7.2 시간 내에 지원을 추가 한 것으로 생각됩니다 ... ssl 컨텍스트를 구성 할 때 해당 ssl 커넥터의 키에 사용될 별칭을 지정할 수 있습니다 ...이 지원이 낙타 나는이 시점에서 확실하지 않다. 그 (것)들과 검사하는 것이 가장 중요한 nio와 ssl 고침의 숫자를위한 최신 7.6 방출에 –

답변

1

모든 HTTPS 서버에서 인증서는 전체 호스트 이름에 대해서만 구성 할 수있는 속성입니다.

HTTPS는 HTTP over TLS이다, 즉 모든 HTTP 트래픽 (따라서 모든 URL 경로가 전송되기 전에) 전송되기 전에 SSL/TLS 연결을 먼저 설립된다 :

HTTP 클라이언트 역할을 에이전트해야한다 또한 TLS 클라이언트로 작동합니다. 적절한 포트 에서 서버에 대한 연결을 시작한 다음 TLS ClientHello를 보내 TLS 핸드 셰이크를 시작해야합니다. TLS 핸드 셰이크가 완료되었습니다. 그러면 클라이언트는 첫 번째 HTTP 요청을 시작할 수 있습니다. 모든 HTTP 데이터는 TLS "응용 프로그램 데이터"로 전송되어야합니다.

경로에 따라 결정을 내릴 수있는 시점까지는 인증서가 이미 전송되었으며 SSL/TLS 핸드 셰이크가 끝났습니다.

이렇게 허용 할 수있는 한 가지 방법은 별개의 호스트 이름을 사용하는 것입니다.

서버에서 다른 호스트 이름과 IP 주소를 구성하여 키 저장소와 다른 별칭을 사용하거나 다른 포트를 사용하여이 작업을 수행 할 수 있습니다.

원칙적으로 SNI (Server Name Indication)를 사용하여 동일한 IP 주소/포트에서 별개의 호스트 이름으로이 작업을 수행 할 수도 있습니다. 불행히도 자바 7조차도 서버 측에서 지원하지 않습니다 (only on the client side). 이에 대한 일반적인 해결 방법은 여러 주체 대체 이름 항목을 사용하여 여러 호스트에 유효한 단일 인증서를 사용하는 것입니다.

+1

를 새롭게하거나 다만 다른 서버 항구를 사용하고 각 부두가 다만 정밀한을 지원하는 각 연결 관을 지정하기 위하여 옹호하는 당신의 동안 –

+0

@ jessemcconnell, 실제로, 나는 SNI에 관해서 만 언급 했었지만 이것을 명확하게하려고 편집했습니다. – Bruno

+0

@ 브루노 당신은 절대적으로 맞습니다. 감사! – jonnysamps