2012-09-05 1 views
1

클라이언트가 C# 및 JAVA로 작성되었습니다. 그래서, 내가 연결할 때 서버 javax.net.ssl.SSLHandshakeException: no cipher suites in common과 C# "EOF 또는 0 바이트"오류가 발생했습니다.이 오류 발생 : "javax.net.ssl.SSLHandshakeException : 공통 암호 스위트 없음"

[C 번호] :

TcpClient tc = new TcpClient(server, 1337); 


      using (sslStream = new SslStream(tc.GetStream())){ } 

[JAVA] :

SSLServerSocketFactory ssocketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); 
    SSLServerSocket server = (SSLServerSocket) ssocketFactory.createServerSocket(1337); 
    server.setEnabledCipherSuites(server.getEnabledCipherSuites()); 

그리고 JAVA 출시 속성 :

-Djavax.net.ssl.trustStore=Certificatename -Djavax.net.ssl.trustStorePassword=thereisapw -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -Djavax.net.debug=ssl TCPServer 
+1

server.setEnabledCipherSuites (server.getEnabledCipherSuites는()) 아무것도 정확하게하지 않습니다. 내가하는 일을 모르는 경우 SSL 매개 변수를 엉망으로 만들지 말 것을 강력히 권합니다. – EJP

답변

2
신뢰 저장소는 원격 인증서를 신뢰하는거야 방법을 정의

그것은 당신에게 선물입니다. 키 저장소는 보유한 인증서 (개인 키가있는 인증서) 용입니다. 차이점에 대한 자세한 내용 here "키 스토어"에 대한 용어는 두 가지 의미가 있으므로 혼동을 줄 수 있습니다.

여기에서는 서버를 실행하려고하지만 자신의 인증서를 설정하지 않았습니다. 키 저장소에서 인증서를 가져 오거나 작성하여 키 스토어로 사용해야합니다.

키 저장소를 지정하지 않으면 서버가 cert/키를 찾을 수 없습니다. 결과적으로 기본적으로 활성화 된 암호화 제품군을 사용할 수 없습니다. 당신이에서 가져온 곳


는 잘 모르겠지만, 당신은 그것을 필요가 없습니다 -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol

+0

고마워, 내가 뭔가를하기 전에 창 truststore에로드해야합니까? – user1649517

+0

서버에 대한 인증서 (개인 키 포함)를 작성 (또는 확보)하고 키 저장소에 저장하고이를 신뢰 저장소로 사용해야합니다. 그런 다음 개인 키없이 인증서 자체를 내보내고 Windows 신뢰할 수있는 인증서 저장소에 실제로 가져와야합니다. – Bruno