在使用微信支付V3接口的过程中,可能会遇到 java.security.InvalidKeyException: Illegal key size
异常。这通常是由于加密密钥长度超过了Java默认支持的范围。以下是解决这一问题的详细步骤。
错误描述
错误信息通常如下:
Caused by: java.lang.IllegalArgumentException: java.security.InvalidKeyException: Illegal key size
at com.wechat.pay.contrib.apache.httpclient.util.AesUtil.decryptToString(AesUtil.java:47)
...
Caused by: java.security.InvalidKeyException: Illegal key size
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1039)
...
解决步骤
1. 安装Java加密扩展(JCE)无限制强度管辖策略文件
对于Oracle JDK 8:
-
下载JCE无限制强度管辖策略文件:
- 从Oracle官方网站或其他可信来源下载
local_policy.jar
和US_export_policy.jar
文件。 - 下载地址:https://www.oracle.com/java/technologies/javase-jce8-downloads.html
- 从Oracle官方网站或其他可信来源下载
-
替换文件:
- 将下载的
local_policy.jar
和US_export_policy.jar
文件替换到<JAVA_HOME>/jre/lib/security/
目录中。
- 将下载的
对于Oracle JDK 9及更高版本:
- JCE文件已经默认包含在JDK中,只需启用即可。
-
找到配置文件:
<JAVA_HOME>/conf/security/java.security
-
启用无限制策略:
crypto.policy=unlimited
确保其值为
unlimited
。如果没有这一行,手动添加。
-
对于OpenJDK:
- OpenJDK 8u161及更高版本默认启用了无限制强度策略,无需额外配置。
2. 使用Bouncy Castle库
如果安装JCE策略文件后问题仍然存在,可以使用Bouncy Castle库来替代JCE。
-
添加Bouncy Castle依赖:
在Maven项目的
pom.xml
中添加以下依赖:<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.68</version> </dependency>
-
在代码中添加Bouncy Castle作为安全提供者:
确保在应用启动时添加Bouncy Castle作为安全提供者:
import org.bouncycastle.jce.provider.BouncyCastleProvider; import java.security.Security; public class Application { public static void main(String[] args) { Security.addProvider(new BouncyCastleProvider()); // 启动Spring应用或其他初始化代码 } }
3. 检查微信支付配置中的密钥设置
确保微信支付的密钥配置正确,并且密钥长度符合要求。以下是一个示例配置:
@Configuration
public class WechatPayConfig {
@Bean
public Verifier getVerifier() throws Exception {
// 加载微信支付公钥
InputStream certStream = getClass().getResourceAsStream("/path/to/wechatpay/cert.pem");
// 初始化公钥验证器
Verifier verifier = new Verifier(certStream);
return verifier;
}
}
4. 检查依赖的库版本
确保所有相关库的版本都是兼容的,尤其是微信支付相关的库和Spring框架。
5. 重新启动
完成以上步骤后,重新启动你的Spring应用,问题应该得到解决。
结论
通过以上步骤,你应该能够解决微信支付相关的 IllegalArgumentException: java.security.InvalidKeyException: Illegal key size
问题。如果问题仍然存在,请检查所有相关的密钥配置和加密操作,确保它们都符合要求。