首页 > Java > java教程 > 如何修复 Java SSL 连接中的'无法生成 DH 密钥对”异常?

如何修复 Java SSL 连接中的'无法生成 DH 密钥对”异常?

Patricia Arquette
发布: 2024-12-06 10:00:27
原创
638 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板