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

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

