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

先分析异常的描述:

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

然后分析异常的具体位置:

找到具体抛异常的位置
升级jdk版本后,出现SecurityException: JCE cannot authenticate the provider BC_第1张图片
然后往上翻可以看到这个类具体是什么作用

升级jdk版本后,出现SecurityException: JCE cannot authenticate the provider BC_第2张图片
BouncyCastle类是一个加密的第三方类,jdk本身是有一些加密的方法的,如果需要额外的一些加密方法的话需要用到BouncyCastle类。但我不记得加过这个类啊,我们先看看到底有没有这个类。

搜了一下发现有,我们在看看这是在哪里加进来的。
升级jdk版本后,出现SecurityException: JCE cannot authenticate the provider BC_第3张图片
通过全局搜索没有发现,说明这个类不是我们自己主动通过maven加进来的,是在加别的类的时候,依赖加进来的。
升级jdk版本后,出现SecurityException: JCE cannot authenticate the provider BC_第4张图片
选定模块以后,点击上面的那个图标,然后通过ctrl+f快速搜索这个jar包
升级jdk版本后,出现SecurityException: JCE cannot authenticate the provider BC_第5张图片
升级jdk版本后,出现SecurityException: JCE cannot authenticate the provider BC_第6张图片
这里我们这可以知道,是在引入支付宝支付的时候引入了bcprov这个jar包,然后初始化的时候就使用了这个jar包,但是这个版本的jar包签名太旧了(jdk8的时候没有问题),所有报了个签名未通过的错。

解决方法:

  1. 既然是jar包版本太旧了,那是不是升级一下就好了。单独引入新版本的jar包。(怕有影响的可以把sdk那边的手动排除掉)


    org.bouncycastle
    bcprov-jdk16
    1.46




	org.bouncycastle
	bcprov-jdk15to18
	1.64

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

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

3.直接强制关闭Bouncy Castle

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

你可能感兴趣的:(java,jar,java)