TransportListener
(기본적으로 HTTPS 연결을 위해 지정된 포트에서 수신 대기하는 수신기)이 시작될 때 SSLContext
을로드하는 리액터 패턴 구현이 있습니다. . 내가 추가하거나 신뢰 저장소로/인증서를 제거하면 공유 SSLContext 객체의 init()을 다시 호출 할 때의 효과
init()
방법
sslContext.init(keyManagers, trustManagers, null);
를 호출합니다. 리스너에서 다운 타임을 피하기 위해 SSLContext
을 다시로드해야합니다.
그래서 현재 내가 겪고있는 문제입니다.
요청이 수신자에게 도착하여 연결이 설정된 것으로 가정합니다. 응답이 클라이언트에 반환되기 전에 SSLContext
객체를 다시로드하면 이는 전송하기 전에 페이로드를 암호화하는 연결의 SSLEngine
객체의 wrap
프로세스에 영향을 줍니까?
주 : 나는 같은 SSLContext
객체가 리스너가 시작할 때 여러 다른 개체에 전달되는 모든 SSLEngines.The SSLContext 객체에 전달되고 있음을 확인했다. 예를 들어,이 SSLContext 객체를 전달해야하는 연결 풀이 있습니다. 따라서 새로운 SSLContext 객체를 만들면 기존 연결이 완전히 끊어집니다. 연결 풀입니다. 그래서 동일한 SSLContext 개체를 사용하려고합니다.
당신이해야 할 일이라고 결정하기 전에 당신 자신을 위해서 이것을 테스트하는 것을 막을 수있는 아무것도 없었습니다. 새로운 인증서를로드 할 때마다 * 새로운 * SSLContext를 사용하는 것을 막을 수있는 아무 것도 없습니다 : 이것은 또한 리스너의 작동 중지 시간을 피할 것입니다. 같은 SSLSession을 복수의 SSLEngine에 건네 줄 수 없습니다. 'SSLContext'를 의미합니까? – EJP
... 새 컨텍스트를 설정하지 않고 truststore를 수정할 수 있습니다. – eckes
다른 모든 사용 사례에 대해이 기능을 테스트했습니다. 그러나 나는 위에서 언급 한 것과 같은 시나리오를 재현 할 수 없다 (응답을 보내기 전에 sslcontext를 수정하지만 요청을받은 후에). 신뢰 저장소를 수정하는 데 문제가 없습니다. 필요한 것은'Listener'를 다시 시작하지 않고 런타임에 트러스트 스토어를 다시로드하는 것입니다. –