首頁 > Java > java教程 > 如何修復 Java SSL 連線中的「無法產生 DH 金鑰對」異常?

如何修復 Java SSL 連線中的「無法產生 DH 金鑰對」異常?

Patricia Arquette
發布: 2024-12-06 10:00:27
原創
671 人瀏覽過

How to Fix the

「無法產生DH 金鑰對」異常故障排除

嘗試與某些IRC 伺服器(特別是光圈.esper.net)建立SSL 連線時: 6697),Java可能會遇到「java.lang.RuntimeException: Could not generated DH keypair」異常,並伴隨通過後續的「java.security.InvalidAlgorithmParameterException:質數大小必須是 64 的倍數,範圍只能從 512 到 1024(含)」。

原因:

此異常源自於 Java 接受 DH 金鑰對的預設最大素數大小,即 1024 位元。但是,啟動 SSL 連線的伺服器(在本例中為 aperture.esper.net)可能會嘗試協商具有較大質數大小的 DH 金鑰對。

解決方法:

1。使用 BouncyCastle 的 JCE 實作:

根據 JDK-6521495 錯誤報告中的建議,您可以利用 BouncyCastle JCE 實作來取代預設的 Java 實作。此替代實作支援更大的 DH 金鑰對大小。

2.升級 Java 版本:

此問題已在最新的 Java 版本中解決。最大質數大小限制在 JDK 7044060 中提高到 2048 位,並在 JDK 8072452 中完全刪除(允許大小超過 2048 位)。升級到 Java 9 或更高版本將解決該問題。

範例(使用BouncyCastle):

Security.addProvider(new BouncyCastleProvider());

SSLContext sslContext = SSLContext.getInstance("SSL", "BC");
sslContext.init(null, trustAllCerts, new SecureRandom());
s = (SSLSocket)sslContext.getSocketFactory().createSocket();
s.connect(new InetSocketAddress(host, port), timeout);
s.setSoTimeout(0);
((SSLSocket)s).startHandshake();
登入後複製

附加說明:

附加說明:附加說明:>有問題的伺服器,aperture. esper.net,從標準角度來看似乎配置錯誤,上述解決方案將允許您的Java應用程式成功連接並建立 SSL 會話。

以上是如何修復 Java SSL 連線中的「無法產生 DH 金鑰對」異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板