解讀JDK8踩坑JCE加密限制版本問題
一、解決方案1
聲明:jdk1.8已經經過線上環(huán)境使用
1. 調研
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無限制強度加密策略文件,覆蓋即可。
官方網站提供了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
5. 操作流程
從官網下載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. 聲明
官網說從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應用程序即可。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
JUnit測試控制@Test執(zhí)行順序的三種方式小結
這篇文章主要介紹了JUnit測試控制@Test執(zhí)行順序的三種方式小結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
SpringBoot深入探究@Conditional條件裝配的使用
這篇文章主要為大家介紹了SpringBoot底層注解@Conditional的使用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06
Java中BeanUtils.copyProperties的11個坑總結
我們日常開發(fā)中,經常涉及到DO、DTO、VO對象屬性拷貝賦值,很容易想到org.springframework.beans.BeanUtils的copyProperties,它會自動通過反射機制獲取源對象和目標對象的屬性,pyProperties,會有好幾個坑呢,本文將給大家總結一下遇到的坑,需要的朋友可以參考下2023-05-05
Idea2019創(chuàng)建Springboot Web項目的方法步驟
這篇文章主要介紹了Idea2019創(chuàng)建Springboot Web項目的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10
使用Spring Data Jpa的CriteriaQuery一個陷阱
使用Spring Data Jpa的CriteriaQuery進行動態(tài)條件查詢時,可能會遇到一個陷阱,當條件為空時,查詢不到任何結果,并不是期望的返回所有結果。這是為什么呢?2020-11-11

