2016-06-11 7 views

답변

1

'기본'JSSE .getSocketFactory.getServerSocketFactory 간접적으로 클라이언트 측 SSLSocket, 또는 차례로 각각의 경우에 (일부 추가 방법으로) Socket을 하위 클래스 서버 측 SSLSocket를 생성하고 SSL/TLS 모두를 관리 SSLServerSocket를 만들 프로토콜 및 네트워크 I/O를 (대부분의) 응용 프로그램에서 가장 간단한 간단한 대기 모드로 지원합니다. 채널을 사용하려면

, 당신은 대신 는 SSL/TLS 프로토콜과 하지 네트워크를 처리하는 SSLEngine의 작성해야합니다 (또는 기타를!) I/O를. 그런 다음 SocketChannel을 읽고 쓰고 SSLEngine에 'wrapped'라는 데이터를 보내고받은 데이터에 'unwrap'을 지정합니다.

개요는 클라이언트 용 부분 예제 코드가있는 https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#SSLEngine을 참조하십시오. peer-identity 힌트를 사용하여 setUseClientModefalse으로 변경하고 이 아닌 것으로 변경해야합니다. SSL/TLS 클라이언트는 서버 ID별로 저장된 세션을 선택 (캐시 및 선택)해야하지만 서버는 이전에 할당 한 세션 ID를 사용하고 클라이언트는 기억합니다.) 다음은 (자세한 소개가있는) javadoc을 참조하십시오. SSLEngine 클래스는 https://docs.oracle.com/javase/8/docs/api/javax/net/ssl/SSLEngine.html 또는 즐겨 찾는 JDK/IDE에 있습니다.

또는 Java SSLEngine example에는 예제를 작성한 사람들의 링크가 있지만 직접 보지 않았습니다.

1

표준 방법은 SSLEngine을 사용하는 것입니다. 하지만 그 수업은 심각하게 사용하기가입니다. 주위에 튜토리얼이 있지만, 일반적인 응용 프로그램의 경우 SSLEngine을 사용하는 것이 좋습니다.

나는 같은 문제를 몇 시간 전에 보았고 나 자신의 라이브러리를 작성했다. 거기에 몇 가지 예제가 있습니다 물론 물론 Netty와 같은 프로젝트 안에 코드가 있습니다. 그러나 어느 옵션도 강력하거나 쉽게 재사용 할 수 없습니다.

TLS Channel은 SSLEngine을 ByteBuffer로 랩핑하고 일반 SocketChannels와 마찬가지로 사용할 수 있습니다.