「無法產生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中文網其他相關文章!