상호 식별 (ClientAuth)이 가능한 SSL 소켓 서버 및 클라이언트 프로그램을 사용하고 있습니다. 클라이언트는 자체 인증서를 사용하는 두 가지 유형으로 구성됩니다. 어떻게 서버가 새로 연결된 clent의 유형을 결정할 수 있습니까? 클라이언트의 인증서 별칭 또는 다른 식별 가능한 속성? 핸드 쉐이크가 완료Java SSL 클라이언트 ID
SSLContext ctx = SSLContext.getInstance("TLSv1.2");
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(serverKeystoreFile), serverKeystorePass);
kmf.init(ks, serverCertificatePass);
ks.load(new FileInputStream(serverTruststoreFile), serverTruststorePass);
tmf.init(ks);
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLServerSocketFactory ssf = ctx.getServerSocketFactory();
SSLServerSocket sslserversocket = (SSLServerSocket) ssf.createServerSocket(port);
sslserversocket.setNeedClientAuth(true);
// accept connection from client
SSLSocket sslsocket = (SSLSocket) sslserversocket.accept();
// At this point, I would like to determine the connected client's certificate alias
// or some other property that is unique for each of the acceptable client certificates.
"... 또는 다른 구별 할 수있는 속성"- 아래의 워렌 (Walren)의 답변 외에 'getCipher'를 호출하여 암호 모음을 검색 할 수도 있습니다. 'getCipher'는'SSLContext'와'HttpsUrlConnection'과 같이 사용할 수 있습니다. 나는 당신이 필요로하는 것처럼 구별되는 것은 확실하지 않지만, 특별한 연결의 속성은 분명합니다. 추가 세션 관련 정보를 제공해야하는'getSessionContext'도 있습니다. – jww
키 스토어를로드 할 때 입력 스트림을 닫는 것을 잊지 마십시오. – Bruno