尝试安全连接到服务器时,Java“没有共同的密码套件”问题

当客户端(不是我的)安全地连接到我的服务器时,我遇到了问题。

似乎连接因不匹配的密码而被拒绝,但我已经validation服务器确实与客户端共享一些密码。

这可能是未知密码的问题(未知0x0:0x60)? 如果是这样,我该怎么做才能解决它?

Java SSL日志如下所示:

Listener-https, setSoTimeout(30000) called Worker-30, READ: SSLv3 Handshake, length = 63 *** ClientHello, SSLv3 RandomCookie: GMT: 1267050437 bytes = { 23, 244, 228, 68, 161, 225, 218, 222, 207, 128, 228, 138, 127, 141, 159, 63, 232, 48, 242, 240, 26, 76, 58, 158, 179, 0, 192, 140 } Session ID: {} Cipher Suites: [TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_IDEA_CBC_SHA, SSL_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_EXPORT1024_WITH_RC4_56_SHA, Unknown 0x0:0x60, SSL_RSA_EXPORT_WITH_RC4_40_MD5] Compression Methods: { 0 } *** Worker-30, SEND SSLv3 ALERT: fatal, description = handshake_failure Worker-30, WRITE: SSLv3 Alert, length = 2 Worker-30, called closeSocket() Worker-30, handling exception: javax.net.ssl.SSLHandshakeException: no cipher suites in common Worker-30, called close() Worker-30, called closeInternal(true) Worker-30, called close() Worker-30, called closeInternal(true) 

谢谢,-Ben

添加到erickson的答案,如果您的证书不使用RSA密钥对,而是使用DSA密钥对,那么任何数量的RSA密码套件“填充”都不会有助于解决此问题。 您需要启用DSA相关的密码套件(它们通常由DSS关键字表示),并且客户端也使用相同的密码套件。

这种边缘情况可能会成为您的问题的原因是由于生成密钥对时keytool实用程序的默认行为 – DSA而不是RSA是默认算法。

您说在您的服务器上启用了一些客户端请求的密码。 你有没有成功连接其中一个? 例如,尝试OpenSSL的s_client实用程序,其中-cipher选项仅指定该密码套件。

也许提供程序不支持您认为已启用的所有密码,或者您的服务器上未正确安装无限强度辖区文件。