2010-09-07 26 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選項僅指定該密碼套件。

也許提供程序不支持您認爲已啓用的所有密碼,也可能是無限強度管轄區文件未正確安裝在您的服務器上。

相關問題