2012-09-05 65 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。关于“keystore”的术语可能会令人困惑,因为它可以有两个含义)。

在这里,您尝试运行服务器,但您尚未设置自己的证书。您需要在密钥库中导入/创建证书并将其用作密钥库。

如果您未指定密钥库,则服务器将无法找到证书/密钥。因此,它将无法使用默认启用的任何密码套件。


我不知道你在哪里得到这个从,但你并不需要它:-Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol

+0

谢谢,所以我需要在做什么之前将它加载到窗口的信任库? – user1649517

+0

不仅需要为您的服务器创建(或获取)证书(使用其私钥),将其放入密钥库并将其用作信任库。然后,您需要导出证书本身(不带私钥),并将其导入Windows信任证书存储区中。 – Bruno

相关问题