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

 更新时间:2023年05月30日 09:17:12   作者:gblfy  
这篇文章主要介绍了JDK8踩坑JCE加密限制版本问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

一、解决方案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下面


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

将其设置为:

crypto.policy=unlimited

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java Integer.ValueOf()的一些了解

    Java Integer.ValueOf()的一些了解

    这篇文章主要介绍了Java Integer.ValueOf()的一些了解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Java集合遍历实现方法及泛型通配

    Java集合遍历实现方法及泛型通配

    这篇文章主要介绍了Java集合遍历实现方法及泛型通配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Springboot 集成 lombok.jar过程解析

    Springboot 集成 lombok.jar过程解析

    这篇文章主要介绍了Springboot 集成 lombok.jar过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • dubbo环境搭建ZooKeeper注册中心全过程

    dubbo环境搭建ZooKeeper注册中心全过程

    文章介绍Dubbo环境搭建,包含ZooKeeper注册中心的安装配置(修改数据存储路径、启动服务并验证节点)和dubbo-admin监控中心的部署流程(解压、打包、运行jar包,需注意Maven版本及zkServer状态)
    2025-07-07
  • 推荐两款java开发实用工具 hutool 和 lombok

    推荐两款java开发实用工具 hutool 和 lombok

    通过本文给大家推荐两款java开发实用工具 hutool 和 lombok,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-04-04
  • SpringBoot测试WebMVC的4种实现方案

    SpringBoot测试WebMVC的4种实现方案

    在项目开发中,测试是确保应用质量的关键环节,对于基于SpringBoot构建的Web应用,高效测试MVC层可以极大提高开发及联调效率,下面我们来看看SpringBoot中测试WebMVC的4种实现方案吧
    2025-04-04
  • Java中的IO流之字符流Reader和Writer

    Java中的IO流之字符流Reader和Writer

    这篇文章主要介绍了Java中的IO流之字符流Reader和Writer,Reader : 和InputStream的唯一的区别就在于读的数据单位不同,继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符16bit,需要的朋友可以参考下
    2023-10-10
  • 新建springboot项目时,entityManagerFactory报错的解决

    新建springboot项目时,entityManagerFactory报错的解决

    这篇文章主要介绍了新建springboot项目时,entityManagerFactory报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 深入了解Java 脚本化api编程

    深入了解Java 脚本化api编程

    Java 脚本 API 是一种独立于框架的脚本语言,使用来自于Java代码的脚本引擎 。可以使用Java语言编写定制/可扩展的应用程序并将自定义脚本语言选择留给最终用户 。下面我们来详细了解一下吧
    2019-06-06
  • java删除指定目录下所有空文件夹的方法

    java删除指定目录下所有空文件夹的方法

    这篇文章主要介绍了java删除指定目录下所有空文件夹的方法,涉及java针对文件与目录的遍历及目录删除相关操作技巧,需要的朋友可以参考下
    2016-08-08

最新评论