2014-05-17 2 views
2

을 반환하지 나는 내 호스트 파일이 내가 추가 한SNIMatcher 내가 서버가 올바른 인증서

http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#SNIExamples

SSLServerSocket sslServerSocket = ...; 
SNIMatcher matcher = SNIHostName.createSNIMatcher("www\\.example\\.(com|org)"); 
Collection<SNIMatcher> matchers = new ArrayList<>(1); 
matchers.add(matcher); 

SSLParameters params = sslServerSocket.getSSLParameters(); 
params.setSNIMatchers(matchers); 
sslServerSocket.setSSLParameters(params); 

예를 들어 example.com과 example.org를 기반으로 SNIMatcher를 추가했습니다 내가 갈 때

127.0.0.1 할 수 example.com 및 example.org 그들은 모두 같은 로컬 호스트 인증서를 얻을

(나는 example.org에 대해 별도의 인증서를 만들었습니다)

제 질문은 SNIMatcher를 부착하는 올바른 방법입니다

자체 인증서가있는 각 가상 호스트마다 별도의 일치 프로그램을 만들어야합니까? (나는 그것을했지만 두 호스트가

http://docs.oracle.com/javase/8/docs/api/javax/net/ssl/SSLParameters.html#setSNIMatchers-java.util.Collection-

그래서 내가 부착하고있는 방식을 변경 동일한 유형 0 (StandardConstants.SNI_HOST_NAME)를했기 때문에 나는 IllegalArgumentException를 얻고 그냥 방법의 예는하지 않았다 (COM | 조직)하지만이 모두 동일한 인증서를 반환하는 것입니다. 그냥 올바른 방법 궁금해?

이 감사 나는 그것이있는 키의 인증서 표시의 X509 물건 (고유 이름)과 관련이있다 생각

답변

0

sslserversocketfactory를 발행 한 sslcontext에 사용 된 키 스토어.

키를 선택하고 x509 인증서 ("단순히 허용 된"sni 호스트 이름이 있음)는 x509의 일부 DN과 관련이 있습니다 (사용 가능한 유일한 매핑 지식이기 때문입니다). 호스트 매핑은 확실히 키 저장소 별칭으로 수행되지 않습니다! 키 스토어의 맵핑 정보는 인증 기관이 서명 한 호스트 이름 인 cert에 있어야합니다.

AFAIK, SNI 서버 측 메커니즘은 해당 키 선택을 수행하지 않으며, 연결된 전체 키 스토어/keymanager에 허용 된 호스트 이름 만 제한합니다.

추신 : 키 저장소를 전환하려면 모든 키 저장소의 모든 자료를 제공 할 수있는 X509KeyManager를 사용하여 본질적으로 sslcontext를 작성해야합니다. KeyManagerFactory에서 주요 관리자의 배열을 래핑 할 가능성이 높습니다 ... 그리고 내가 기억하는 것에 너무 빠르므로 지원이 여기에서 끝납니다!

관련 문제