2012-09-07 3 views
1

Java TLS 클라이언트에서 작업 중이며 서버 마녀가 자주 통신합니다. 협상중인 TLS 연결은 자원과 시간이 많이 소요된다는 것을 알고 있습니다. GnuTLS에서 매우 흥미로운 솔루션을 발견했습니다. 관심이 있으십니까? 자바 TLS 클라이언트를 재개 기능으로 만들 수 있습니다. 이전에 협상 된 데이터를 사용하여 새 연결을 설정하십시오. 세션이 여전히 유효한 경우Java에서 TLS 연결 재개

최고의 소원

답변

3

는만큼 당신이 소켓을 만들 수 있도록 동일한의 SSLSocketFactory를 사용할 때, 자바의 JSSE 구현은 자동으로 기존 세션을 다시 시작됩니다.

SSLSocket.getSession().getId()을 호출하고 두 개의 다른 소켓이 동일한 세션을 사용하고 있는지 확인할 수 있습니다.

+0

실제로 동일한 'SSLContext'를 사용하는 한. – EJP

1

실제로 ssl 세션 캐시가 포함되어 있으므로 보관해야하는 sslcontext입니다. 또한 SSLContext에는 SSLSessionContext getClientSessionContext()가 있습니다. 이 SSLSessionContext를 사용하면 보관할 SSL 세션 수와 기간을 조정할 수 있습니다.

불행히도 제 3 자의 SSLContext 설정에 액세스하는 것은 매우 드뭅니다. 도움이된다고 생각하거나 SSLServerSocketFactory 클래스 이름을 제공하라는 요청을하지 않습니다 (미리 튜닝 된 인스턴스조차도 포함하지 않습니다). 하나).

클라이언트 소켓의 경우에는 단지 어렵습니다. 나는 소켓이 수십 개의 스택 프레임을 더 깊게 열 것이라고 예상하는 threadlocal 소켓 팩토리를 준비해야한다.

트릭은 경량 소켓 팩토리 (클라이언트 또는 서버)의 클래스 이름을 제공하는 것입니다.이 소켓 클래스는 필요한 방식을 초기화 한 실제 팩토리를 포함하는 threadlocal을 조회하지만 (서버 또는 클라이언트 중 하나 인 ssl 세션의 캐시와 함께)).