2017-03-19 22 views
0

클라이언트 - 서버 채팅 응용 프로그램 코딩. 그 둘 사이의 연결을 암호화하고 싶습니다. 처음으로 그것을하는 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

아무도 내가이 오류를 해결할 수 있습니까?

+0

서버에 루트 인증서에서 확장되는 java에 알려진 인증서가 필요합니다. 실제 인증서가 필요하거나 keytools를 사용하여 cacerts로 가져와야합니다. 나중에 디버깅을 활성화하여 진행중인 오류를 볼 수도 있습니다. – benchpresser

+0

스 니펫이 여기에서 작동했습니다 (동일한 네트워크에서 oracle java 8 u121을 실행하는 두 대의 시스템). 이 환경 변수는 다음과 같이 환경을 기술하십시오 :'System.setProperty ("javax.net.debug", "ssl");' – nandsito

+0

@nandsito 내 환경은 다음과 같습니다 : 두 컴퓨터 모두 java 1.8.0_121, 두 컴퓨터 동일한 네트워크에 연결되어 있고 둘 다 Windows 10을 실행 중입니다. 컴퓨터 A는 서버와 클라이언트를 실행 중이며 컴퓨터 A의 클라이언트는 올바르게 작동하고 있으며 컴퓨터 B는 임상 의사가 실행 중이며이 컴퓨터는 연결할 때 오류가 발생합니다. copypaste에 대한 링크를 추가합니다. [link] https://codepaste.net/fmyekg – beli

답변

0

내 문제가 해결되었습니다. 내 트러스트 스토어와 키스톤은 프로젝트 파일에 있었지만 실행 가능한 jar 파일로 컴파일했을 때 트러스트 저장소와 키 스토어가 실행 가능한 jar 파일에 포함되어 있다고 생각했지만 불행히도 그렇지 않았습니다. 나는 runstable 항아리와 함께 하나의 폴더에 truststore와 keystore를 두어 그것을 해결했다.

솔루션은 매우 간단하며 모든 문제는 저의 경험으로 인해 발생했습니다.

도움 주셔서 감사합니다.