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

时间:2010-09-07 21:15:02

标签: java ssl encryption

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

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

对于未知密码(未知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

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:4)

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

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