报错原因:
在使用oracle的JDK时,JAR包必须签署特殊的证书才能使用
解决方法
1. 找到 java.security 在jvm安装地方 /jdk安装目录/jre/lib/security
2. 添加 security.provider.9=org.bouncycastle.jce.provider.BouncyCastleProvider
例如:
security.provider.1=sun.security.provider.Sun security.provider.2=sun.security.rsa.SunRsaSign security.provider.3=com.sun.net.ssl.internal.ssl.Provider security.provider.4=com.sun.crypto.provider.SunJCE security.provider.5=sun.security.jgss.SunProvider security.provider.6=com.sun.security.sasl.Provider security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI security.provider.8=sun.security.smartcardio.SunPCSC security.provider.9=org.bouncycastle.jce.provider.BouncyCastleProvider
这9不一定非得填9,而是根据上一个security.provider序号往下加一。
3. 添加 bcprov-jdk16-146.jar, bcmail-jdk16.143 到 /jdk安装目录/jre/lib/ext (提供maven的地址)
随便添加一个版本或者几个版本,总有一个可以
还有几种没试过的解决思路,这个没解决可以试试下面两种
方法1.使用openJDK或者非oracle的JDK,这样就可以绕开证书的限制
方法2.JDK对类似bouncycastle的bcprov-jdk15on-159.jar包是有安全签名认证的,当我们如果进行生成jar的时候,如果选择类似eclipse的export runnable jar file 功能,如下红色勾选的选项,eclipse会解压缩依赖的包后一起打包成一个jar文件

以上生成jar的方式,会解压bcprov-jdk15on-159.jar,这类安全加密算法类似jar一旦有更改,包括解压,签名就会失效,不能通道jdk的验证,就会出现以上错误。
针对以上的打包方式解决方法很简单,就是如下红色勾选的方式,将jar完成的打包进一个文件中,这样就没有问题了

生成的文件是这样的:

记得移动jar的时候,把**_lib文件带上放在同一个文件夹下面。
网上的兄弟很多各种改jdk安全配置文件,那样不好。。。
附送动态加入密码包见截图.就不需要添加类似:security.provider.9=org.bouncycastle.jce.provider.BouncyCastleProvider如下

动态加入
Security.addProvider(org.bouncycastle.jce.provider.BouncyCastleProvider)
解决JCE无法验证BC提供者的问题
在使用Oracle JDK时遇到'JCE cannot authenticate the provider BC'的错误,原因是JAR包需要特殊证书。解决方案包括修改`java.security`文件添加BouncyCastleProvider,将bcprov-jdk16-146.jar等文件放入lib/ext目录,或考虑使用OpenJDK以避开证书限制。另外,避免使用Eclipse的某些打包方式导致加密算法jar签名失效,可以选择将所有依赖打包进单个jar文件。
595

被折叠的 条评论
为什么被折叠?



