项目里微信支付使用的wxpay-sdk,在调用微信退款方法,报错:
java.io.IOException: Short read of DER length
at sun.security.util.DerInputStream.getLength(DerInputStream.java:582)
at sun.security.util.DerValue.init(DerValue.java:391)
at sun.security.util.DerValue.(DerValue.java:332)
at sun.security.util.DerValue.(DerValue.java:345)
at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1938)
at java.security.KeyStore.load(KeyStore.java:1445)
at com.github.wxpay.sdk.WXPayRequest.requestOnce(WXPayRequest.java:55)
at com.github.wxpay.sdk.WXPayRequest.request(WXPayRequest.java:127)
at com.github.wxpay.sdk.WXPayRequest.requestWithCert(WXPayRequest.java:256)
at com.github.wxpay.sdk.WXPay.requestWithCert(WXPay.java:177)
at com.github.wxpay.sdk.WXPay.refund(WXPay.java:502)
at com.github.wxpay.sdk.WXPay.refund(WXPay.java:480)
问题是在开发测试环境,都没有重现这个问题,于是网上搜索一番,找到如下答案:
- 因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有一定的限制。比如默认不允许256位密钥的AES加解密,解决方法就是修改策略文件。
- 下载与JDK或JRE对应版本的jce文件包,如jdk为1.8,所以下载 jce_policy-8.zip,下载地址
- 下载解压后,把jar文件上传到需要安装jce机器上JDK或JRE的security目录下,覆盖源文件即可。
JDK:将两个jar文件放到%JDK_HOME%\jre\lib\security下
JRE:将两个jar文件放到%JRE_HOME%\lib\security下
覆盖之前,记得备份源文件,以防万一。
网上基本上都是这样的说法,正当我准备去oracle官网下载时,发现我自己服务器上jre下已经有两个版本的jar包了,所以就直接将 unlimited 包下jar包复制到了 security 下。
问题解决了。
但是,我也看到网上有人说这个方法不管用,以后碰到再说吧~