Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSL握手-java.security.invalidalgorithParameterException问题_Java_Ssl_Java 6 - Fatal编程技术网

SSL握手-java.security.invalidalgorithParameterException问题

SSL握手-java.security.invalidalgorithParameterException问题,java,ssl,java-6,Java,Ssl,Java 6,需要您对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.in

需要您对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.lang.RuntimeException:无法在com.sun.net.ssl.internal.ssl.DHCrypt上生成DH密钥对。(DHCrypt.java:106)
在com.sun.net.ssl.internal.ssl.ClientHandshaker.serverKeyExchange上(ClientHandshaker.java:556)
在com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:183)上
位于com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
位于com.sun.net.ssl.internal.ssl.Handshaker.process_记录(Handshaker.java:529)
位于com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)
位于com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
位于com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)
... 还有6个
原因:java.security.invalidalgorithParameterException:Prime size必须是64的倍数,并且只能在com.sun.crypto.provider.DHKeyPairGenerator.initialize(DashoA13*)上介于512到1024之间(包括512和1024之间)
位于java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:627)
在com.sun.net.ssl.internal.ssl.DHCrypt.(DHCrypt.java:100)。。。还有13个
这是java的已知缺陷/限制,在v7及以后版本中已经修复,但在“1.6.0.10”中仍然存在

在上面的链接中,我发现了下面的陈述-

客户提交的解决方案:使用BouncyCastle的JCE 实现,而不施加此限制,或诉诸 bignumerapi直接调用

我们无法升级到最新的java版本。我们可以实现什么来解决这个SSL握手问题? bouncycastle实现是否需要服务器端更改?或者我们只能在客户端使用?
任何关于解决此问题的建议都将受到高度赞赏

BouncyCastle的JCE实现的jar可以在中下载。
所需的配置可在中找到。
配置完成后。按照以下代码打印安全提供程序信息

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版)

将Java 6更新为6u171或更高版本(无需升级)。