问题源:
错误一:jboss java.lang.SecurityException: JCE cannot authenticate the provider BC
错误二:java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider
工作环境中,调用了【bcprov-jdk16-1.46.jar】,
tomcat环境中运行正常,但是客户JBOSS环境始终报JCE cannot authenticate the provider BC的错误。
按照百度方法,始终无法解决。借鉴牛人的帖子及百度方法相结合,终于解决了此问题。
一、JDK修改
①环境设置:(本人电脑:JAVA_HOME = C:\Program Files\Java\jdk1.7.0_51)
C:\Program Files\Java\jdk1.7.0_51\jre\lib\security\java.security
找到security.provider所在行,并依顺序添加下记内容(数字11可变,按实际顺序):
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider
②jar包拷贝:
C:\Program Files\Java\jdk1.7.0_51\jre\lib\ext
C:\Program Files\Java\jre7\lib\ext
添加jar:
bcprov-jdk16-1.46.jar
我试过只拷贝到JDK目录下,不拷贝到jre路径下,web项目报找不到BouncyCastleProvider这个类,
所以还是2个文件夹都拷贝保险。
③项目中的bcprov-jdk16相关的jar包删除;
二、JBOSS环境修改
通常百度上的JCE cannot authenticate the provider BC以及java.lang.NoClassDefFoundError问题的解决办法
只涉及到上面的【一、JDK修改】,但是实际验证,按照步骤一完成后,JBOSS还是同样找不到BouncyCastleProvider这个类。
所以需要进行以下修改:
①在jboss下创建如下目录:$JBOSS_HOME/modules/org/bouncycastle/main,
将bbcprov-jdk16-1.46.jar、module.xml(该文件可比其它目录copy过来)放到该目录下。
module.xml编辑如下:
<module xmlns="urn:jboss:module:1.1" name="org.bouncycastle">
<resources>
<resource-root path="bcprov-jdk16-1.46.jar"/>
</resources>
<dependencies>
<module name="javax.api" slot="main" export="true"/>
</dependencies>
</module>
<subsystem xmlns="urn:jboss:domain:ee:1.0"/>,将它替换为:
<subsystem xmlns="urn:jboss:domain:ee:1.0">
<global-modules>
<module name="org.bouncycastle" slot="main"/>
</global-modules>
</subsystem>
大功告成了,可以启动JBOSS执行项目,看是否还报错。