java.lang.SecurityException: JCE cannot authenticate the Provider BC问题处理方法记录

实践证明:本文记录方法适用于任何环境下的java.lang.SecurityException: JCE cannot authenticate the Provider BC相关问题。

环境:华为云 弹性云服务器 

jdk版本以及cpu情况:

问题描述:我在华为云服务器上部署我们的一个产品的时候有授权文件校验,然后在读取文件时候就出现了这样的问题,提示:java.lang.SecurityException: JCE cannot authenticate the Provider BC 最终导致授权文件读取异常 系统不能正常运行的

问题现象:

 经过百度 等多番查找资料 发现 是环境配置问题,解决方法如下:

我配置的jdk信息:

 1.找到jre下的配置文件java.security并修改:我用的是jdk1.8.0_311的aarch64版本 与其他版本的文件结构略微不同,我的路径 是:/opt/java/jdk1.8.0_311/jre/lib/security/下的java.security (不同环境的路径可能不同,要注意分辨)

在该配置文件里的 List of providers and their preference orders部分添加如下内容(尤其是红色框图部分):

具体如下:

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=sun.security.mscapi.SunMSCAPI
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider

 保存文件即可。

此时如果我们去再启动服务,发现还是会报错,问题依然没有解决。

参考其他资料,可知此时依旧缺少对应的jar包  bcprov-ext-jdk,jar包要放到jre的lib的ext目录下,如我的环境是:/opt/java/jdk1.8.0_311/jre/lib/ext下 。 那么用哪个版本 就是问题的关键。

这里我踩了一些坑,比如我把:bcprov-jdk15-135.jar、bcprov-jdk15-136.jar、bcprov-jdk16-143.jar 这些版本一起或者分别放进去

就都会出现这样的问题:提示我:java.lang.VerifyError: java. lang.VerifyError: class org. bouncycast le . asn1. ASN1Primitive overrides final method equals. (Ljava/lang/0bject;)

这种问题,基本就可以断定是jar包版本与当前的jdk版本不匹配了。

更换jar包,最终我下了个bcprov-ext-jdk15on-160.jar放进去

然后我再启动服务器,就没有发现报错了,最后系统的授权文件也能正常读取了。  加解密正常了

这个问题我是第二次遇到了,这次记录一下,方便后续查阅,也供其他小伙伴参考一下。

这里附个 我使用的jar链接吧:

链接:https://pan.baidu.com/s/1zeY5PfvrPG9Rhp5l7D54Yw 
提取码:j0tl 
--来自百度网盘超级会员V3的分享

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
java.security.NoSuchProviderException: JCE cannot authenticate the provider BC是一个错误,意味着Java加密扩展(JCE)无法验证提供者BC的身份。这个错误通常发生在项目使用了BC加密包,并且在打包运行时出现。 解决这个问题方法有几种: 1. 确保正确引入了BC加密包:首先,确保你已经正确地将BC加密包添加到项目的依赖中,并且版本与你的项目要求的版本相匹配。你可以尝试重新下载和添加正确的BC加密包。 2. 检查权限文件:如果你的项目需要使用无限强度的加密算法,则应该确保已经下载并正确安装了“Unlimited Strength Jurisdiction Policy Files”。这些文件可以解决JCE对于强加密算法的限制。 3. 添加BouncyCastleProvider:尝试通过在代码中显式添加BouncyCastleProvider来解决问题。你可以在项目的源代码中添加以下代码: ```java Security.addProvider(new BouncyCastleProvider()); ``` 确保在使用BC加密功能之前添加这行代码。 4. 检查冲突的提供者:如果你的项目中同时使用了其他的加密提供者,例如cybersource,可能会导致冲突。请确保你的项目中没有引入冲突的加密提供者,并尝试解决冲突。 总结来说,解决java.security.NoSuchProviderException: JCE cannot authenticate the provider BC错误的关键是确保正确引入了BC加密包,检查权限文件,添加BouncyCastleProvider,并解决与其他加密提供者的冲突。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [百旺电子发票发布到服务器报错.txt](https://download.csdn.net/download/sinat_26708145/12707339)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [java.security.NoSuchProviderException: JCE cannot authenticate the provider BC](https://blog.csdn.net/m0_37986733/article/details/126475025)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [:error constructing MAC: java.lang.SecurityException: JCE cannot authenticate the provider BC](https://blog.csdn.net/qq_53276288/article/details/120553631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值