JAVA 支持所有的加密套件,但是由于美国的出口限制的原因,JDK 发行版本中加解密有一定的限制,比如默认不允许 256 位密钥的 AES 加解密,解决方法就是修改策略文件。Oracle 允许下载强加密的未限制版本,其实就是几个 jar 包形式的策略文件(local_policy.jar
、US_export_policy.jar
)。
在未授权的情况下,密钥大于 128 时(比如微信支付退款回调解密),代码会抛出以下错误:
java.security.InvalidKeyException: Illegal key size or default parameters
我们团队在 2020 年的对接项目时就遇到过这个问题,我仅仅是把解决方案的帖子发到了群里分享给了团队,然后修改了我们自己的 jdk 的镜像,问题无感的解决了。时隔近三年遇到相同问题时老员工也已经全不记得了,解释美国出口限制
、JCE
、无限强度管辖权策略文件
几个名词时也是一脸懵逼。这里做下整理输出,以后再遇到就不发别人的博客、帖子了。
什么是 JCE
JCE(Java Cryptography Extension)是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)
算法的框架和实现。
JCE 无限强度管辖策略文件即Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files
。是 Oracle 官方解决 JDK 美国的出口限制问题的策略文件,包含local_policy.jar
、US_export_policy.jar
两个 jar 包。
解决方案
对于
jdk1.8.0_151
以前的版本,下载一致版本的JCE 无限强度管辖策略文件
,覆盖到${JAVA_HOME}/jre/lib/security
目录即可。对于
jdk1.8.0_151
和以后的版本,无需下载JCE 无限强度管辖策略文件
,只需要修改${JAVA_HOME}/jre/lib/security/java.security
,将注释掉的#crypto.policy=unlimited
然后保存即可。