记录一个迁移系统时遇到的一个小坑

640 阅读1分钟

前言


本文是记录了一个在线上部署时遇到的一个问题,Jdk8的加密解密策略的存在限制的问题。

一、问题


使用AES加解密异常

java.security.InvalidKeyException: Illegal key size

百度搜索了一下说这是因为某些国家的进口管制限制, JDK 8u151 之前的版本限制了一些加密算法的key最大长度。 比如默认不允许 256 位密钥的 AES 加解密,超过了就会报异常。

然后我想了一下为什么本地不出现这个问题,只有服务器才会出现这个问题,我专门去看了一下本地的这两个jar文件和服务器的两个jar文件。

windwos 在Java_home/jre/lib/security下,mac 在Java_home/jre/lib/security/policy下 有两个jar文件local_policy.jar和US_export_policy.jar。

image.png

image.png

image.png

image.png

rnm,原来本地有个限制的版本还有个不限制的版本。因此我在本地启动的时候没有JceSecurity的限制,并且允许使用AES加密算法,但在服务器上它具有Java bundle提供的有限版本,所以说才在迁移服务器的时候遇到这个问题。

二、解决方案

替换local_policy.jar和US_export_policy.jar这两个jar 替换成没有任何限制就可以了。 官方网站提供了JCE无限制权限策略文件的下载:

JDK6的下载地址:\
http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

JDK7的下载地址:\
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

JDK8的下载地址:\
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

或者直接点击下载即可:点击下载(这个是jdk8)

一键安装脚本

# yum -y curl unzip 
curl -q -L -C - -b "oraclelicense=accept-securebackup-cookie" -o /tmp/jce_policy-8.zip \
-O http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip \
&& unzip -oj -d ${JAVA_HOME}/jre/lib/security /tmp/jce_policy-8.zip \*/\*.jar \
&& rm /tmp/jce_policy-8.zip