hutool.crypto.CryptoException: 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
    在这里插入图片描述
    关闭示例:

import cn.hutool.crypto.SecureUtil;

public class Example {
    public static void main(String[] args) {
        // Disable Bouncy Castle
        SecureUtil.disableBouncyCastle();
        
        // Your code here
        // ...
    }
}
  • 4.既然是hutool框架里的类初始化的时候默认去使用Bouncy Castle,那直接不用hutool是不是也能行🤔。当然了,方法3里面也能关闭这个,所以这个就没去试。
    ————————————————

版权声明:本文为CSDN博主「一个超赞的名字」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36963762/article/details/122338213

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐