解读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线程池队列中的延迟队列DelayQueue

    详解Java线程池队列中的延迟队列DelayQueue

    这篇文章主要为大家详细介绍了Java线程池队列中的延迟队列DelayQueue的相关资料,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-12-12
  • JDBC如何访问MySQL数据库,并增删查改

    JDBC如何访问MySQL数据库,并增删查改

    这篇文章主要介绍了JDBC如何访问MySQL数据库,帮助大家更好的理解和学习java与MySQL,感兴趣的朋友可以了解下
    2020-08-08
  • Springboot mybatis plus druid多数据源解决方案 dynamic-datasource的使用详解

    Springboot mybatis plus druid多数据源解决方案 dynamic-datasource的使用详

    这篇文章主要介绍了Springboot mybatis plus druid多数据源解决方案 dynamic-datasource的使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java如何实现双向链表功能

    Java如何实现双向链表功能

    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表
    2021-11-11
  • Java8新特性Stream流实例详解

    Java8新特性Stream流实例详解

    Stream流是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。这篇文章主要介绍了Java8新特性Stream流的相关资料,需要的朋友参考下吧
    2017-10-10
  • springboot基于docsify 实现随身文档

    springboot基于docsify 实现随身文档

    这篇文章主要介绍了springboot基于docsify实现随身文档的相关资料,需要的朋友可以参考下
    2022-09-09
  • Java 线程相关总结

    Java 线程相关总结

    这篇文章主要介绍了Java 线程的相关资料,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-02-02
  • SpringBoot实现单文件与多文件上传功能

    SpringBoot实现单文件与多文件上传功能

    这篇文章主要介绍了SpringBoot实现单文件与多文件上传功能,Spring MVC对文件上传做了简化,而在Spring Boot中对此做了更进一步的简化,文件上传变得更为方便,下面开始演示,需要的小伙伴可以参考一下,希望对你有所帮助
    2022-01-01
  • Springboot集成定时器和多线程异步处理操作

    Springboot集成定时器和多线程异步处理操作

    这篇文章主要介绍了Springboot集成定时器和多线程异步处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Springboot 整合通用mapper和pagehelper展示分页数据的问题(附github源码)

    Springboot 整合通用mapper和pagehelper展示分页数据的问题(附github源码)

    这篇文章主要介绍了Springboot 整合通用mapper和pagehelper展示分页数据(附github源码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09

最新评论