我有一个用C#编写的客户端和JAVA中的服务器。因此,当我尝试连接时,我在服务器javax.net.ssl.SSLHandshakeException: no cipher suites in common
和C#“EOF或0字节”中出错。
[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
答案 0 :(得分:2)
信任库定义了您将如何信任呈现给您的远程证书。密钥库用于您拥有的证书(并且您拥有私钥)。 (关于差异here的更多细节。关于“密钥库”的术语可能会令人困惑,因为它可能有两个含义。)
在这里,您尝试运行服务器,但尚未设置自己的证书。您需要在密钥库中导入/创建证书并将其用作密钥库。
如果未指定密钥库,则服务器将无法找到证书/密钥。因此,它将无法使用默认启用的任何密码套件。
我不确定你从哪里得到这个,但你不需要它:-Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol