【问题标题】:Getting this error: "javax.net.ssl.SSLHandshakeException: no cipher suites in common"收到此错误:“javax.net.ssl.SSLHandshakeException:没有共同的密码套件”
【发布时间】:2012-09-05 15:23:13
【问题描述】:

我有一个用 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

【问题讨论】:

  • server.setEnabledCipherSuites(server.getEnabledCipherSuites()) 什么都不做。如果你不知道自己在做什么,我强烈建议你不要乱用这样的 SSL 参数。

标签: java c# .net ssl jsse


【解决方案1】:

信任库定义了您将如何信任呈现给您的远程证书。密钥库用于您拥有的证书(以及您拥有私钥的证书)。 (有关here 的区别的更多详细信息。关于“密钥库”的术语可能会令人困惑,因为它可以有两种含义)。

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

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


我不确定你是从哪里得到的,但你不需要它:-Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol

【讨论】:

  • 谢谢,所以在做某事之前我需要将它加载到窗口的信任库?
  • 不仅,您需要为您的服务器创建(或获取)证书(及其私钥),将其放入密钥库并将其用作信任库。然后,您需要导出证书本身(不带私钥)并将其导入 Windows 受信任的证书存储区。
猜你喜欢
  • 1970-01-01
  • 2015-07-27
  • 2017-05-08
  • 2015-12-06
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
相关资源
最近更新 更多