2010-09-07 45 views
5

当客户端(而非我的)安全地连接到我的服务器时,出现问题。尝试安全连接到服务器时出现Java“没有密码套件共同问题”

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

它可能是未知密码(未知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

回答

10

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

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

+0

看起来像我的服务器使用的密钥存储具有带DSA密钥对的单个证书。我会尝试切换到RSA,看看现在是否正常工作... – Ben 2010-09-07 22:27:20

+0

@本,很好的了解进展情况。在那里,做到了:) – 2010-09-07 22:40:44

+0

它完全工作!你是最好的,我一直在处理这个waaaaay太久。谢谢你,谢谢你,谢谢你! – Ben 2010-09-07 23:33:34

4

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

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

相关问题