關於JDK8采坑JCE加密限制版本問題
JDK8的加密策略存在限制版本和無限制版本,隨着越來越多的第三方工具只支持 JDK8,業務環境中,發現有些方法會報異常:
1、使用AES加解密
java.security.InvalidKeyException: Illegal key size
2、安全性機制導致的訪問https會報錯:
Received fatal alert: handshake_failure; nested exception is javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure,accessUrl
這是因為某些國家的進口管制限制,JDK默認的加解密有一定的限制。
比如默認不允許 256 位密鑰的 AES 加解密,解決方法就下載官方JCE無限制強度加密策略文件,覆蓋即可。
官方網站提供了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
jce_policy-8.zip(見--->文件)
但從Java 1.8.0_151和1.8.0_152開始,為JVM啟用無限制強度管轄策略 有了一種新的更簡單的方法。如果不啟用此功能,則不能使用AES-256:
在 jre/lib/security 文件夾中查找文件 java.security,現在用文本編輯器打開java.security,並找到定義java安全性屬性crypto.policy的行,它可以有兩個值limited或unlimited - 默認值是limited。將其設置為:
crypto.policy=unlimited
現在重新啟動指向JVM的Java應用程序即可。