2016-09-01 19 views
1

TransportListener (기본적으로 HTTPS 연결을 위해 지정된 포트에서 수신 대기하는 수신기)이 시작될 때 SSLContext을로드하는 리액터 패턴 구현이 있습니다. . 내가 추가하거나 신뢰 저장소로/인증서를 제거하면 공유 SSLContext 객체의 init()을 다시 호출 할 때의 효과

그럼 내가 (청취자의 방법에 JMX 호출을 통해) 다시 같은 init() 방법

sslContext.init(keyManagers, trustManagers, null); 

를 호출합니다. 리스너에서 다운 타임을 피하기 위해 SSLContext을 다시로드해야합니다.

그래서 현재 내가 겪고있는 문제입니다.

요청이 수신자에게 도착하여 연결이 설정된 것으로 가정합니다. 응답이 클라이언트에 반환되기 전에 SSLContext 객체를 다시로드하면 이는 전송하기 전에 페이로드를 암호화하는 연결의 SSLEngine 객체의 wrap 프로세스에 영향을 줍니까?

: 나는 같은 SSLContext 객체가 리스너가 시작할 때 여러 다른 개체에 전달되는 모든 SSLEngines.The SSLContext 객체에 전달되고 있음을 확인했다. 예를 들어,이 SSLContext 객체를 전달해야하는 연결 풀이 있습니다. 따라서 새로운 SSLContext 객체를 만들면 기존 연결이 완전히 끊어집니다. 연결 풀입니다. 그래서 동일한 SSLContext 개체를 사용하려고합니다.

+1

당신이해야 할 일이라고 결정하기 전에 당신 자신을 위해서 이것을 테스트하는 것을 막을 수있는 아무것도 없었습니다. 새로운 인증서를로드 할 때마다 * 새로운 * SSLContext를 사용하는 것을 막을 수있는 아무 것도 없습니다 : 이것은 또한 리스너의 작동 중지 시간을 피할 것입니다. 같은 SSLSession을 복수의 SSLEngine에 건네 줄 수 없습니다. 'SSLContext'를 의미합니까? – EJP

+0

... 새 컨텍스트를 설정하지 않고 truststore를 수정할 수 있습니다. – eckes

+0

다른 모든 사용 사례에 대해이 기능을 테스트했습니다. 그러나 나는 위에서 언급 한 것과 같은 시나리오를 재현 할 수 없다 (응답을 보내기 전에 sslcontext를 수정하지만 요청을받은 후에). 신뢰 저장소를 수정하는 데 문제가 없습니다. 필요한 것은'Listener'를 다시 시작하지 않고 런타임에 트러스트 스토어를 다시로드하는 것입니다. –

답변

0

당신은 이것을 생각할 필요가 있습니다. 기존의 연결이있는 경우 이미 인증서 교환을 성공적으로 마쳤으므로 새 인증서가 필요하지 않으므로 부분 핸드 셰이크까지 포함하여 새로 또는 다시 초기화 된 SSLContext이 필요하지 않습니다. 현재 세션을 다시 키거나 클라이언트 인증서를 요청할 수 있습니다. SSLContext는 완전한 핸드 쉐이크가 부족한 경우에는 사용하지 말아야합니다. 새 인증서를 필요로가는 모든 새로운 연결에 대한 새로운SSLContext를 사용하여 시작해야 할 일은

. 정의에 따라 기존 연결에 대해 아무 것도 할 필요가 없습니다.

+0

혼란에 드려 죄송합니다. 나는 그것을 새롭게했다. 나는'SSLContext' 객체를 전달합니다. 내가 알고 싶은 것은'SSLEngine' 객체를 사용하여 포장하고 풀어 버리는 기존 소켓 연결이'SSLContext' 객체의 신뢰 관리자를 변경함으로써 영향을 받는지 여부입니다. 이것은 요청이 수신되었지만 응답이 아직 보내지지 않은 시나리오에서만 문제가됩니다. 들어오는 연결이 키 집합을 사용하여 래핑되지 않고 응답이 위의 시나리오에 해당하는 별도의 키 집합을 사용하여 래핑되는 가능성이 있습니까? –

+0

세션 키는'SSLContext'가 아닌'SSLSession'에 있습니다. 그러나 당신이'기존 연결의 SSLContext를 재 초기화해야한다고 생각하는 이유는 여전히 모르겠습니다. – EJP

+0

즉,'SSLEngine'은 손 떨림에만'SSLContext'를 사용합니다. 그 때문에, SSLContext의 변경은, 핸드 쉐이크가 아닌 경우, 기존의 SSLSession 또는 접속/소켓의 SSLEngine에 영향을주지 않습니다. 나 맞아? –