解讀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步可以跳過,如果不行請繼續(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)文章
基于JVM 調(diào)優(yōu)的技巧總結(jié)分析
本篇文章是對JVM 調(diào)優(yōu)的技巧進(jìn)行了總結(jié)和分析。需要的朋友參考下2013-05-05JUnit測試控制@Test執(zhí)行順序的三種方式小結(jié)
這篇文章主要介紹了JUnit測試控制@Test執(zhí)行順序的三種方式小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09SpringBoot深入探究@Conditional條件裝配的使用
這篇文章主要為大家介紹了SpringBoot底層注解@Conditional的使用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Java中BeanUtils.copyProperties的11個(gè)坑總結(jié)
我們?nèi)粘i_發(fā)中,經(jīng)常涉及到DO、DTO、VO對象屬性拷貝賦值,很容易想到org.springframework.beans.BeanUtils的copyProperties,它會(huì)自動(dòng)通過反射機(jī)制獲取源對象和目標(biāo)對象的屬性,pyProperties,會(huì)有好幾個(gè)坑呢,本文將給大家總結(jié)一下遇到的坑,需要的朋友可以參考下2023-05-05Idea2019創(chuàng)建Springboot Web項(xiàng)目的方法步驟
這篇文章主要介紹了Idea2019創(chuàng)建Springboot Web項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10java實(shí)現(xiàn)求兩個(gè)字符串最長公共子串的方法
這篇文章主要介紹了java實(shí)現(xiàn)求兩個(gè)字符串最長公共子串的方法,是一道華為OJ上的一道題目,涉及Java針對字符串的遍歷、轉(zhuǎn)換及流程控制等技巧,需要的朋友可以參考下2015-12-12使用Spring Data Jpa的CriteriaQuery一個(gè)陷阱
使用Spring Data Jpa的CriteriaQuery進(jìn)行動(dòng)態(tài)條件查詢時(shí),可能會(huì)遇到一個(gè)陷阱,當(dāng)條件為空時(shí),查詢不到任何結(jié)果,并不是期望的返回所有結(jié)果。這是為什么呢?2020-11-11