2017-10-23 5 views
1

SSL을 사용하여 TCP 연결을 구성하는 동안 TcpSSLContextSupport의 자체 인스턴스 인 DefaultTcpSSLContextSupport을 사용하고있는 스프링 문서를 기반으로 클라이언트 인증서를 초기화해야합니다. 여기에 우리 콩 설정입니다 :인증서를 제공 할 필요가 없을 때 SSL 연결을 위해 TcpNetClientConnectionFactory를 구성하는 올바른 방법은 무엇입니까?

private static final int SERIALIZER_HEADER_SIZE = 2; 

@Bean 
public ByteArrayLengthHeaderSerializer byteArrayLengthHeaderSerializer() { 
    return new ByteArrayLengthHeaderSerializer(SERIALIZER_HEADER_SIZE); 
} 

@Bean 
public AbstractClientConnectionFactory tcpClientConnectionFactory() { 
    TcpNetClientConnectionFactory connFactory = 
     new TcpNetClientConnectionFactory(props.getUrl(), props.getPort()); 
    connFactory.setSerializer(byteArrayLengthHeaderSerializer()); 
    connFactory.setDeserializer(byteArrayLengthHeaderSerializer()); 
    connFactory.setSoTimeout(props.getSoTimeout()); 

    if (props.isUseSSL()) { 
     connFactory.setTcpSocketFactorySupport(new DefaultTcpNetSSLSocketFactorySupport(() -> { 
      return SSLContext.getDefault(); 
     })); 
    } 

    return connFactory; 
} 

클라이언트 인증서 이후 알려진 인증서되고 우리는 우리 자신의 키 스토어 및 신뢰를 제공 할 필요가 없습니다, 이것은 TCP 연결을 만들 때 제대로 SSL을 구성하는 올바른 방법인가?

답변

1

바로이 방법은 맞춤 SSLContextConnectionFactory에 삽입하는 것과 같습니다. 당신은 또한에 "모든 신뢰"를 고려할 수

당신의 상황이 : 당신은 또한 빈 상점을 가리 할 수 ​​있어야하므로 클라이언트 인증은 기본적으로 꺼져 있는지

TrustManager[] trustAllCerts = new TrustManager[] { 
     new X509TrustManager() { 
      public X509Certificate[] getAcceptedIssuers() { 
       X509Certificate[] myTrustedAnchors = new X509Certificate[0]; 
       return myTrustedAnchors; 
      } 

      @Override 
      public void checkClientTrusted(X509Certificate[] certs, String authType) {} 

      @Override 
      public void checkServerTrusted(X509Certificate[] certs, String authType) {} 
     } 
    }; 

    SSLContext sc = SSLContext.getInstance("SSL"); 
    sc.init(null, trustAllCerts, new SecureRandom()); 
    return sc; 
+1

참고. 우리는 [여기에 테스트 케이스가 있습니다.] (https://github.com/spring-projects/spring-integration/blob/master/spring-integration-ip/src/test/java/org/springframework/integration/ip/tcp /connection/SocketSupportTests.java#L339-L346). 특히 클라이언트 인증을 가능하게합니다. –

+0

두 가지 모두 감사합니다. 테스트 사례가 매우 명확합니다. :) –