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

Ben*_*Ben 5 java encryption ssl

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

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

这可能是未知密码的问题(未知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)
Run Code Online (Sandbox Code Playgroud)

谢谢,-Ben

Vin*_*lds 10

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

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


eri*_*son 5

您说您的服务器上启用了一些客户端请求的密码。您已成功与其中一位联系吗?例如,尝试s_client使用仅指定该密码套件的选项的 OpenSSL 实用程序-cipher

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