【问题标题】:SSL handshake - java.security.InvalidAlgorithmParameterException issueSSL 握手 - java.security.InvalidAlgorithmParameterException 问题
【发布时间】:2019-04-24 00:04:37
【问题描述】:

需要您对 java 问题的建议。

目前我们在使用 java 代码访问 Web 服务时遇到问题。 我们的供应商使用 SSL - RSA 2048 位 (SHA256withRSA) 和 DH(Diffie-Hellman 算法)素数大于 1024 的 SSL。 我们有 java 版本 1.6.0.10 正在生产中。

当我们执行代码时,我们得到了错误——

Caused by: java.lang.RuntimeException: Could not generate DH keypair at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:106)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:556)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:183)
        at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
        at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)
        ... 6 more
Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive) at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DashoA13*..)
        at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:627)
        at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:100)         ... 13 more

这是 java 的已知错误/限制,它已在 v7 及更高版本中修复,但仍存在于“1.6.0.10”中

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=7044060 https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6521495

在上面的链接中,我找到了下面的语句——

客户提交的解决方法:使用 BouncyCastle 的 JCE 实施,不施加此限制,或诉诸 直接使用 BigNumber API。

我们无法升级到最新的 java 版本。我们有什么办法可以解决这个 SSL 握手问题吗? 我们是否需要对 bouncycastle 实施进行服务器端更改?或者我们只能在客户端使用? 非常感谢任何有关解决此问题的建议。

【问题讨论】:

  • 将您的 Java 6 更新到 6u171 或更高版本(无需升级)。

标签: java ssl java-6


【解决方案1】:

BouncyCastle 的 JCE 实现的 jar 可以在 LATEST JAVA RELEASES of Bouncy Castle Crypto package 下载。
所需的配置可以在To configure a JCE Provider找到。
配置完成后。打印安全提供者信息,如以下代码。

Provider[]  providers = Security.getProviders();
for (int i = 0; i != providers.length; i++)
{
     System.out.println(providers[i].getInfo());
}

查看是否显示“BouncyCastle Security Provider v1.60”。(假设您正在下载1.6版)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 2016-08-11
    相关资源
    最近更新 更多