遇到的问题
在调用https的外部接口时,遇到一个异常:
Caused by: java.lang.RuntimeException: Could not generate DH keypair
at sun.security.ssl.ECDHCrypt.<init>(ECDHCrypt.java:82)
at sun.security.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:724)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:281)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:961)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1072)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
... 103 common frames omitted
Caused by: java.security.InvalidAlgorithmParameterException: parameter object not a ECParameterSpec
at org.bouncycastle.jce.provider.JDKKeyPairGenerator$EC.initialize(Unknown Source)
at sun.security.ssl.ECDHCrypt.<init>(ECDHCrypt.java:77)
... 110 common frames omitted
出现的原因和解决办法
发现maven打包依赖时加入org.bouncycastle:bcprov-jdk14导致,老版本的bcp只支持1024位加密,遇到2048位加密就出这个异常了。
有两个办法解决,推荐第一个,彻底解决:
* 找到依赖org.bouncycastle:bcprov-jdk14的配置,用exclusion排除它,并加入最新的bcprov。
* 在java命令行加参数: -Dcom.sun.net.ssl.enableECC=false
我的项目出错是由于itextpdf-5.0依赖了bcprov-jdk14,升级到itextpdf-5.5.13并增加了对bcprov-jdk15的依赖。 由于itextpdf-5.5.13中对bcprov-jdk15的依赖是optional,需要另外增加bcprov-jdk15
1 | <dependency> |