2013-07-29 3 views
0

상황이있을 수 있으며 가능한 해결책이 있는지 확실하지 않습니다.SSL 인증서가 여러 개인 Java 서버

SSL 소켓이있는 Java 서버가 있고 인증서 "A"가 & "B"입니다. 또한 두 종류의 클라이언트가 있습니다. 하나는 인증서 "A"이고 다른 하나는 인증서 "B"입니다. 그러나 서버 측에 하나의 인증서 만로드되므로 인증서가있는 클라이언트 나 인증서가 하나만로드됩니다. "A"는 인증서를 가진 고객 만 연결할 수 있습니다. "B"가 연결할 수 있습니다.

모든 클라이언트의 연결에서 어떤 인증서가 사용되는지 (A 대 B) 결정하고 적절한 인증서를 사용하도록 Java 서버를 수정할 수 있습니까?

피고 : 내 보안상의 무지를 용서해주십시오.

감사합니다.

+0

Sun/Oracle Glassfish Java 서버에 대해 이야기하고 있습니까? – fvu

+0

SSL 소켓이있는 자바 응용 프로그램으로 서버 역할을합니다. – MeIr

+0

고객에게 인증서 A와 B가있는 이유는 무엇입니까? 클라이언트 인증서 인증을 사용하려고합니까? – Bruno

답변

1

Server Name Indication (SNI) extension을 통해 동일한 IP 주소 및 포트에서 두 개의 서버 인증서를 사용할 수 있으며 이는 클라이언트와 서버에서 지원해야합니다.

Java는 클라이언트 측에서 since Java 7을 지원합니다.

아쉽게도 서버 측에서 지원되지 않습니다. 이것은 planned for Java 8입니다.

한편 서버에서 SNI 지원이 필요한 경우 다른 서버를 사용하여 SSL/TLS 연결을 처리하고 일반 텍스트 연결을 응용 프로그램에 전달할 수 있습니다. 일반적으로 이것은 HTTP (S)에 대한 Apache Httpd (역방향 프록시 사용)로 수행 할 수 있습니다.

또는 the HTTPS-SNI-Proxy project은 다른 프로토콜 (HTTPS 이름에도 불구하고)에 더 유연 할 수 있습니다. 나는 그것을 시도하지는 않았지만 README에 따르면 초기 클라이언트 Hello에서 SNI 확장자를 찾은 다음 구성된 SSL에 따라 전체 SSL/TLS 연결 (해독하지 않고)을 다른 서버로 전달합니다. 귀하의 예에서는 클라이언트가 SNI 확장자로 요청한 내용에 따라 두 포트 (클라이언트가 듣고 싶은 포트가 아닌)에 두 개의 SSLServerSocket 포트를 설정하고이 포트에서 다른 포트로 연결을 전달해야합니다.

+0

현재 우리는 직접적인 보안 소켓 연결을하고 있습니다. SNI 프록시 유형의 거래가 있습니까? – MeIr

+0

두 인증서가 고유 한 호스트 이름을 사용한다고 가정합니다 (그렇지 않으면 SNI가 도움이되지 않습니다). – Bruno

+0

고맙습니다. – MeIr

관련 문제