서버 인증서를 보내려면 보안 서버 소켓의 경우 을 KeyManagerFactory.getKeyManagers()
으로 초기화하고 키 스토어로 초기화해야합니다.
하지만 어떻게 클라이언트 측에서이 작업을 수행 할 수 있습니까?
즉, 클라이언트의 경우 :java 보안 클라이언트 소켓 인증
System.setProperty("javax.net.ssl.keyStore", "clientKeystore.keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "secret");
System.setProperty("javax.net.ssl.trustStore", "clientKeystore.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "secret");
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) factory.createSocket("localhost", 7890);
신뢰 저장소와 동일한 키 저장소를 사용합니다. 나는 JSSE를 arround로보기 만해도 괜찮다고 생각한다.
문제는 서버 부분에 있습니다 (서버 소켓에 setNeedClientAuth
이 있음).
Exception in thread "main" javax.net.ssl.SSLHandshakeException: null cert chain
그래서 인증서를 보내도록 클라이언트 측을 구성해야합니까? 시스템 속성이 올바른 방법이 아닌가요?
SSLContext를 클라이언트 측에서 사용하는 방법을 알지 못하기 때문에.
감사합니다.
클라이언트 또는 서버 코드에 오류가 있습니까? –
@GregS : 이것은 서버 코드의 예외입니다. 클라이언트 코드에서 예외가 발생했습니다. 메인 "java.net.SocketException : 소프트웨어가 연결을 중단했습니다 : recv failed가 발생했습니다." – Cratylus