今天在与某客户做系统对接时,调用对方接口,提示错误“ Could not generate DH keypair”,
在网上查了下,说是Java 早期版本是只支持 1024 位的 DH Parmaeter的。
通过https://www.ssllabs.com/ssltest/analyze.html?d=访问地址,发现对方服务器DHE最低是支持2048,目前项目用到的JDK
版本DHE算法不支持,所以会出现上述错误。
有两个解决方法
一、升级自己的jre(本地开发系统升级JDK)到JAVA8 。
不过更换版本不是最好的解决方案,升级JDK版本可能会对项目有影响,只能做为一个备选方案。
二、修改jre(本地开发系统升级JDK) 配置
bcprov-ext-jdk15on-1.59.jar
bcprov-jdk15on-1.59.jar
然后下载完毕之后就需要将这两个jar包放到 $JAVA_HOME/jre/lib/ext 下。
接下来修改文件java.security,这个文件的位置在$JAVA_HOME/jre/lib/security/ 下,
打开此文件,找到security.provider.8 (具体看自己用的jre,如果最后一个是security.provider.9,下面依次加1),在这句话下面加上:
security.provider.9=org.bouncycastle.jce.provider.BouncyCastleProvider
加上了之后,重启应用就可以运行了。
附上面两个jar的maven坐标
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.59</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-ext-jdk15on</artifactId>
<version>1.59</version>
</dependency>