回首憶惘然
2019-07-30 16:37:07
Java SSLHandshakeException“沒有共同的密碼套件”我正在使用SSLServerSocket接受我的openSUSE服務(wù)器上的客戶端連接,但它們都不能連接。我總是得到一個SSLHandshakeException說no cipher suites in common。我已經(jīng)激活了所有可能的套件,啟用了多個協(xié)議,嘗試使用最新的oracle JRE和openjdk。我還在論壇和東西上關(guān)注了其他幾個帖子并“解鎖”了oracle jre中的所有密碼套件,我改變了openjdk jre的設(shè)置,如下所示:已禁用:已#security.provider.10=sun.security.pkcs11.SunPKCS11 ${java.home}/lib/security/nss.cfg 啟用:security.provider.9=sun.security.ec.SunEC這是我初始化SSLServerSocket的方式: System.setProperty("javax.net.ssl.keyStore", "./keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "nopassword");
java.lang.System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
}
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
}
};
// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("TLSv1.2");
sc.init(null, trustAllCerts, new SecureRandom());
SSLServerSocket ssl = (SSLServerSocket) sc.getServerSocketFactory().createServerSocket(
DownloadFilelist.PORT);
// Got rid of:
//ssl.setEnabledCipherSuites(sc.getServerSocketFactory().getSupportedCipherSuites());
ssl.setEnabledProtocols(new String[] {"TLSv1", "TLSv1.1", "TLSv1.2", "SSLv3"});
// System.out.println(Arrays.toString(ssl.getEnabledCipherSuites()));
s = ssl;
// s = new ServerSocket(DownloadFilelist.PORT);
s.setSoTimeout(TIMEOUT);問題是我無法找出客戶想要的密碼套件,也不能影響它。我啟動了程序-Djavax.net.debug=ssl,handshake,這是結(jié)果。你們有人能弄明白問題是什么嗎?
3 回答

人到中年有點甜
TA貢獻1895條經(jīng)驗 獲得超7個贊
我自己有這個例外,我鉆研了JRE源代碼。很明顯,這個信息很容易引起誤解。它可能意味著它所說的,但更普遍意味著服務(wù)器沒有以所請求的方式響應(yīng)客戶端所需的數(shù)據(jù)。例如,如果密鑰庫中缺少證書,或者尚未使用適當(dāng)?shù)乃惴ㄉ勺C書,則可能發(fā)生這種情況。實際上,考慮到默認安裝的密碼套件,由于缺少通用的密碼套件,人們不得不花一些時間來真正得到這個例外。在我的特定情況下,我使用默認的DSA算法生成證書,當(dāng)我需要讓服務(wù)器與Firefox一起工作時,我就是RSA。

慕無忌1623718
TA貢獻1744條經(jīng)驗 獲得超4個贊
這個問題可能是由于對客戶端或服務(wù)器上啟用的密碼套件的過度操作造成的,但我懷疑最常見的原因是服務(wù)器根本沒有私鑰和證書。
注意:
ssl.setEnabledCipherSuites(sc.getServerSocketFactory().getSupportedCipherSuites());
擺脫這條線。你的服務(wù)器已經(jīng)不安全了TrustManager
。然后-Djavax.net.debug=SSL,handshake,
嘗試一個連接運行您的服務(wù)器,并在此處發(fā)布結(jié)果輸出。
添加回答
舉報
0/150
提交
取消