解读JDK8踩坑JCE加密限制版本问题

作者:gblfy 时间:2021-09-20 12:42:35 

一、解决方案1

声明:jdk1.8已经经过线上环境使用

1. 调研

JDK8的加密策略存在限制版本和无限制版本,随着越来越多的第三方工具只支持 JDK8,业务环境中,发现有些方法会报异常。

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步可以跳过,如果不行请继续操作

6. 移动jar配置策略

第1步:

把包bcprov-jdk15on-1.56.jar复制一个,放到linux的$JAVA_HOME/jre\lib\ext下面


解读JDK8踩坑JCE加密限制版本问题

第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

解读JDK8踩坑JCE加密限制版本问题

重启服务再次测试

二、解决方案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,现在用文本编辑器打开java.security,并找到定义java安全性属性crypto.policy的行,它可以有两个值limited或unlimited - 默认值是limited。

将其设置为:

crypto.policy=unlimited

现在重新启动指向JVM的Java应用程序即可。

来源:https://blog.csdn.net/weixin_40816738/article/details/108164270

标签:JDK8,JCE加密,限制版本
0
投稿

猜你喜欢

  • 使用Spring开启注解AOP的支持放置的位置

    2022-08-16 19:16:33
  • Java调用第三方接口示范的实现

    2023-06-27 20:32:10
  • 关于使用Mybatisplus自带的selectById和insert方法时的一些问题

    2023-11-01 14:15:42
  • java 单例模式的实例详解

    2023-10-08 05:14:08
  • Java数据结构之栈与队列实例详解

    2021-05-29 03:25:13
  • Android WebView实现顶部进度条

    2023-10-14 23:44:03
  • Mybatis使用JSONObject接收数据库查询的方法

    2023-01-17 05:10:43
  • Java数据结构之线段树的原理与实现

    2021-12-17 13:30:52
  • java接口自动化测试框架及断言详解

    2022-01-23 20:01:36
  • C#调用SQLite的方法实例分析

    2022-09-25 06:02:22
  • 完整的iOS新浪微博分享功能开发

    2023-06-24 14:14:08
  • IDEA2022版本创建maven web项目的两种方式详解

    2022-04-24 19:34:54
  • Ireport的安装与使用教程

    2021-08-08 00:16:43
  • 从Hello World开始理解GraphQL背后处理及执行过程

    2023-06-04 00:25:53
  • springboot 中整合mybatis多数据源不使用JPA

    2023-03-01 08:43:02
  • 一文带你学会Java事件机制

    2022-07-22 05:05:11
  • Spring Boot如何通过自定义注解实现日志打印详解

    2022-07-04 14:10:18
  • Java SpringBoot拦截器详解

    2021-11-01 15:29:37
  • Java静态代理和动态代理总结

    2022-01-02 18:49:21
  • 值得收藏的2017年Java开发岗位面试题

    2023-11-29 15:22:01
  • asp之家 软件编程 m.aspxhome.com