클라이언트 - 서버 채팅 응용 프로그램 코딩. 그 둘 사이의 연결을 암호화하고 싶습니다. 처음으로 그것을하는 Im 그리고 나는 그것이 어렵다는 것을 안다. 내 이해에서 나는 클라이언트를위한 truststore와 서버를위한 keystore가 필요하다. 내가 그들을 생성하기 위해이 가이드를 따라했습니다 : http://peoplesofttutorial.com/generating-key-store-and-trust-store-using-keytool/JAVA, SSLSocket 연결 문제
클라이언트 :
System.setProperty("javax.net.ssl.trustStore" , "hrms.truststore");
System.setProperty("javax.net.ssl.trustStorePassword" , "123456");
SSLSocketFactory sslsf = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLsocket = (SSLSocket) sslsf.createSocket(server, port);
서버 :
System.setProperty("javax.net.ssl.keyStore" , "pskey.keystore");
System.setProperty("javax.net.ssl.keyStorePassword","123456");
SSLServerSocketFactory sslsocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
sslserversocket = (SSLServerSocket) sslsocketfactory.createServerSocket(Port);
서버가 제대로 시작합니다. 서버와 동일한 컴퓨터에서 실행되는 클라이언트를 연결할 때 문제없이 연결할 수 있지만 같은 네트워크에있는 다른 컴퓨터에서 연결할 때이 오류가 발생합니다. javax.net.ssl.SSLException : Received 치명적인 경고 : internal_error
아무도 내가이 오류를 해결할 수 있습니까?
서버에 루트 인증서에서 확장되는 java에 알려진 인증서가 필요합니다. 실제 인증서가 필요하거나 keytools를 사용하여 cacerts로 가져와야합니다. 나중에 디버깅을 활성화하여 진행중인 오류를 볼 수도 있습니다. – benchpresser
스 니펫이 여기에서 작동했습니다 (동일한 네트워크에서 oracle java 8 u121을 실행하는 두 대의 시스템). 이 환경 변수는 다음과 같이 환경을 기술하십시오 :'System.setProperty ("javax.net.debug", "ssl");' – nandsito
@nandsito 내 환경은 다음과 같습니다 : 두 컴퓨터 모두 java 1.8.0_121, 두 컴퓨터 동일한 네트워크에 연결되어 있고 둘 다 Windows 10을 실행 중입니다. 컴퓨터 A는 서버와 클라이언트를 실행 중이며 컴퓨터 A의 클라이언트는 올바르게 작동하고 있으며 컴퓨터 B는 임상 의사가 실행 중이며이 컴퓨터는 연결할 때 오류가 발생합니다. copypaste에 대한 링크를 추가합니다. [link] https://codepaste.net/fmyekg – beli