解讀JDK8踩坑JCE加密限制版本問題
一、解決方案1
聲明:jdk1.8已經(jīng)經(jīng)過線上環(huán)境使用
1. 調(diào)研
JDK8的加密策略存在限制版本和無限制版本,隨著越來越多的第三方工具只支持 JDK8,業(yè)務環(huán)境中,發(fā)現(xiàn)有些方法會報異常。
2. 常見的異常
1、使用AES加解密
- 異常1:
java.security.InvalidKeyException: Illegal key size or default parameters
- 異常2:
java.lang.SecurityException: JCE cannot authenticate the provider BC
3. 安全性機制導致的訪問https會報錯
Received fatal alert: handshake_failure; nested exception is javax.net.ssl.SSLHandshakeException:
Received fatal alert: handshake_failure,accessUrl
這是因為某些國家的進口管制限制,JDK默認的加解密有一定的限制。
4. 解決方案
比如默認不允許 256 位密鑰的 AES 加解密,解決方法就下載官方JCE無限制強度加密策略文件,覆蓋即可。
官方網(wǎng)站提供了JCE無限制權(quán)限策略文件的下載:
- 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
5. 操作流程
從官網(wǎng)下載jce策略文件(補丁包),進入到jdkjre\lib\security目錄 ,覆蓋原有策略文件
注:如果測試通過下面的第6步可以跳過,如果不行請繼續(xù)操作
6. 移動jar配置策略
第1步:
把包bcprov-jdk15on-1.56.jar復制一個,放到linux的$JAVA_HOME/jre\lib\ext下面

第2步:
配置我的安全屬性文件
vim /$JAVA_HOME/jre/lib/security/java.security
security.provider.1=sun.security.provider.Sun security.provider.2=sun.security.rsa.SunRsaSign security.provider.3=sun.security.ec.SunEC security.provider.4=com.sun.net.ssl.internal.ssl.Provider security.provider.5=com.sun.crypto.provider.SunJCE security.provider.6=sun.security.jgss.SunProvider security.provider.7=com.sun.security.sasl.Provider security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI security.provider.9=sun.security.smartcardio.SunPCSC #下面這一行是我新添加的 security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider

重啟服務再次測試
二、解決方案2
2.1. 聲明
官網(wǎng)說從jdk的某個版本以后,只需簡單配置策略文件配置即可
從Java 1.8.0_151和1.8.0_152開始,為JVM啟用無限制強度管轄策略 有了一種新的更簡單的方法。
如果不啟用此功能,則不能使用AES-256:
2.2. 編輯策略文件
vim /$JAVA_HOME/jre/lib/security/java.security
2.3. 修改默認屬性
在 jre/lib/security 文件夾中查找文件 java.security,現(xiàn)在用文本編輯器打開java.security,并找到定義java安全性屬性crypto.policy的行,它可以有兩個值limited或unlimited - 默認值是limited。
將其設置為:
crypto.policy=unlimited
現(xiàn)在重新啟動指向JVM的Java應用程序即可。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
dubbo環(huán)境搭建ZooKeeper注冊中心全過程
文章介紹Dubbo環(huán)境搭建,包含ZooKeeper注冊中心的安裝配置(修改數(shù)據(jù)存儲路徑、啟動服務并驗證節(jié)點)和dubbo-admin監(jiān)控中心的部署流程(解壓、打包、運行jar包,需注意Maven版本及zkServer狀態(tài))2025-07-07
推薦兩款java開發(fā)實用工具 hutool 和 lombok
通過本文給大家推薦兩款java開發(fā)實用工具 hutool 和 lombok,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2021-04-04
SpringBoot測試WebMVC的4種實現(xiàn)方案
在項目開發(fā)中,測試是確保應用質(zhì)量的關(guān)鍵環(huán)節(jié),對于基于SpringBoot構(gòu)建的Web應用,高效測試MVC層可以極大提高開發(fā)及聯(lián)調(diào)效率,下面我們來看看SpringBoot中測試WebMVC的4種實現(xiàn)方案吧2025-04-04
新建springboot項目時,entityManagerFactory報錯的解決
這篇文章主要介紹了新建springboot項目時,entityManagerFactory報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01

