线上报错:java.lang.IllegalArgumentException: java.security.InvalidKeyException: Illegal key size
Closed this issue · 2 comments
错误描述
报错堆栈如下:
java.lang.IllegalArgumentException: java.security.InvalidKeyException: Illegal key size
at com.wechat.pay.java.core.cipher.AbstractAeadCipher.decrypt(AbstractAeadCipher.java:83)
at com.wechat.pay.java.core.certificate.AbstractAutoCertificateProvider.decryptCertificate(AbstractAutoCertificateProvider.java:157)
at com.wechat.pay.java.core.certificate.AbstractAutoCertificateProvider.downloadAndUpdate(AbstractAutoCertificateProvider.java:122)
at com.wechat.pay.java.core.certificate.AbstractAutoCertificateProvider.(AbstractAutoCertificateProvider.java:89)
at com.wechat.pay.java.core.certificate.AbstractAutoCertificateProvider.(AbstractAutoCertificateProvider.java:49)
at com.wechat.pay.java.core.certificate.RSAAutoCertificateProvider.(RSAAutoCertificateProvider.java:32)
at com.wechat.pay.java.core.certificate.RSAAutoCertificateProvider.(RSAAutoCertificateProvider.java:21)
at com.wechat.pay.java.core.certificate.RSAAutoCertificateProvider$Builder.build(RSAAutoCertificateProvider.java:111)
at com.wechat.pay.java.core.RSAAutoCertificateConfig$Builder.build(RSAAutoCertificateConfig.java:114)
重现bug的步骤
构建config的时候,执行build方法时报错。
config = new RSAAutoCertificateConfig.Builder()
.merchantId(merchantId)
.privateKey(privateKey)
.merchantSerialNumber(merchantSerialNumber)
.apiV3Key(apiV3key)
.httpClientBuilder(httpClientBuilder)
.build();
预期行为
能更改实现方式么解决么,比如使用第三方库实现这个逻辑,这个不知道是否能行,只是提一下
导致错误的代码片段
No response
操作系统
centos 7
Java 版本
java 1.8.0_141-b15
wechatpay-java 版本
0.2.11
其他信息
No response
我issue写一半呢,我也遇到了,不过我解决了
也不算是bug,记录一下
简单的说异常是由于jdk版本低于1.8.0_151(也有说是1.8.0_161)引起的,
两种解决方案:
- 升级jdk
- 下载并替换JCE 策略文件,在代码中加如下片段:
Security.setProperty("crypto.policy", "unlimited");
参考文档:
https://www.baeldung.com/jce-enable-unlimited-strength
https://docs.oracle.com/cd/E60058_01/PDF/8.0.6.x/8.0.6.0.0/AG_HTML/Enabling_Unlimited_Cryptographic_Policy_for_Java.htm