升级jdk版本后,出现SecurityException: JCE cannot authenticate the provider BC

先分析异常的描述:

  • JCE cannot authenticate the provider BC:在使用带签名的jar包时,java会对jar包的签名进行验证,以确认jar包是不是合法的。
  • SecurityException:加密异常。
  • 总结:在使用加密的第三方类时,验证签名不过关。

然后分析异常的具体位置:
在这里插入图片描述
找到具体抛异常的位置
在这里插入图片描述
然后往上翻可以看到这个类具体是什么作用

在这里插入图片描述
BouncyCastle类是一个加密的第三方类,jdk本身是有一些加密的方法的,如果需要额外的一些加密方法的话需要用到BouncyCastle类。但我不记得加过这个类啊,我们先看看到底有没有这个类。
在这里插入图片描述
搜了一下发现有,我们在看看这是在哪里加进来的。
在这里插入图片描述
通过全局搜索没有发现,说明这个类不是我们自己主动通过maven加进来的,是在加别的类的时候,依赖加进来的。
在这里插入图片描述
选定模块以后,点击上面的那个图标,然后通过ctrl+f快速搜索这个jar包
在这里插入图片描述
在这里插入图片描述
这里我们这可以知道,是在引入支付宝支付的时候引入了bcprov这个jar包,然后初始化的时候就使用了这个jar包,但是这个版本的jar包签名太旧了(jdk8的时候没有问题),所有报了个签名未通过的错。

解决方法:

  1. 既然是jar包版本太旧了,那是不是升级一下就好了。单独引入新版本的jar包。(怕有影响的可以把sdk那边的手动排除掉)
<!-- 这是maven目前最新的版本 -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk16</artifactId>
    <version>1.46</version>
</dependency>

<!-- 网上搜到有人用这个,上面没用的话试试这个 -->
<dependency>
	<groupId>org.bouncycastle</groupId>
	<artifactId>bcprov-jdk15to18</artifactId>
	<version>1.64</version>
</dependency>

ps:这个方法没有尝试过,是后面补充的,可以试试。

2.使用openjdk。open jdk是不会去验签的,所以直接把oracle jdk改成open jdk。

3.直接强制关闭Bouncy Castle
在这里插入图片描述
4.既然是hutool框架里的类初始化的时候默认去使用Bouncy Castle,那直接不用hutool是不是也能行🤔。当然了,方法3里面也能关闭这个,所以这个就没去试。

遇到 "error constructing MAC: java.lang.SecurityException: JCE cannot authenticate the provider BC" 错误,通常是因为 Java 加密库 (Java Cryptography Extension, JCE) 中的某个安全提供者 (Provider) 没有正确配置或授权。BC (Bouncy Castle) 提供者在这种情况下出现问题。 解决步骤如下: 1. **检查JDK安装**:确保你的Java Development Kit (JDK) 安装包含了正确的加密库,特别是Bouncy Castle。有时它可能不是默认安装的一部分,需要单独下载并添加到JDK的jre/lib/security目录下。 2. **更新或添加BC JCE**:从Bouncy Castle官网下载最新版本JCE Unlimited Strength Jurisdiction Policy Files,它们包含了解决此问题所需的权限文件。将下载的jar包放入`JAVA_HOME/jre/lib/security` 或 `JRE_HOME/lib/security` 目录下。 3. **重启JVM**:更改了库之后,你需要重启Java虚拟机(JVM),让系统加载新的安全提供者。 4. **检查安全策略**:打开`JAVA_HOME/jre/lib/security/java.security` 文件,查看是否正确添加了Bouncy Castle的provider信息。如果没有,需要添加类似这样的行: ``` security.provider.1=BC security.provider.10=bouncyCastleProvider ``` 5. **重新部署应用**:最后,重新部署你的应用程序,确保Java运行环境能够识别并使用新添加的BC Provider。 如果以上步骤都无法解决问题,可能是其他第三方库或者代码中存在冲突,尝试更新依赖库或排查相关的代码段。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值