2012-11-09 9 views
0

내가 알 수있는 바로는 Netty에서 SSL 호스트 이름 확인을 사용하는 데 사용할 수있는 '플래그'또는 구성 설정이 없습니다. 예를 들면 나는 SslHandler.handshake (에 의해 반환 된 ChannelFuture)를 사용하여 사용자 정의 구현 추가 본 적이 : 난 그냥 여기에 올바른 궤도에있어,하고 있는지 확인하려면Netty SSL 호스트 이름 확인 지원

ChannelFuture handshakeFuture = sslHandler.handshake(); 
handshakeFuture.addListener(new ChannelFutureListener() 
{ 
    public void operationComplete(ChannelFuture future) throws Exception 
    { 
     if (future.isSuccess()) 
     { 
      // get peer certs, verify CN (or SAN extension, or..?) against requested domain 
      ... 

을 나는 방법을 실종 아니에요 단순히 호스트 이름 검증을 "가능하게"합니다.

답변

3

Java 7을 사용하는 경우 기본 신뢰 관리자를 통해 SSLSocket 또는 SSLEngine을 구성하여 Java 7을 사용할 수 있습니다. (이것은 인 Netty 독립적이다.) 이와 같은

뭔가 작동해야 this example에 기재된

SSLContext sslContext = SSLContext.getDefault(); 
SSLEngine sslEngine = sslContext.createSSLEngine(); 

SSLParameters sslParams = new SSLParameters(); 
sslParams.setEndpointIdentificationAlgorithm("HTTPS"); 
sslEngine.setSSLParameters(sslParams); 

SSLEngine 인스턴스는 SslHandler 생성자 인수로 전달 될 수있다.

끝점 식별 알고리즘은 HTTPS 또는 LDAP 일 수 있습니다. 다른 프로토콜의 경우 HTTPS 규칙은 상당히 합리적이어야합니다.

(호스트 이름 대신 IP 주소가있는 URL을 사용하는 등의 잘못된 호스트 이름을 사용하여 해당 호스트에 연결하면 물론 작동하는지 확인할 수 있습니다. 인증서에는 주체 대체가 포함되지 않는다고 가정합니다. 이름 IP 주소 항목)

+0

빠른 답변을 보내 주셔서 감사합니다. 완전히 의미가 있습니다. 그리고 일반적으로 여기 및 다른 곳의 환상적인 모든 게시물에 감사드립니다. SSL에 관한 귀하의 이름이 도처에 나타납니다 ... 저는 귀하의 지식과 도움을 많이 의지하고 있습니다. 고맙습니다!! –

+0

이러한 알고리즘 이름은 다음에서 설명합니다. http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#jssenames –

+0

@bruno 채팅에 갈 수 있습니까? http : // chat .stackoverflow.com/rooms/19372/room-for-royi-namir-and-bruno –