项目部署到jboss中出现Cannot verify jar:bcprov-jdk15-144.jar!问题

java 专栏收录该内容
2 篇文章 0 订阅

项目部署到jboss中出现Cannot verify jar:bcprov-jdk15-144.jar!问题

一. 背景:
初次接触jboss,出现此问题的背景是客户需要将项目部署到jboss服务器上运行,让我提供相应war包。由于项目使用了bcprov-jdk15-144实现加解密算法,问题就出现在此jar包上。
二.先上异常代码:

 java.lang.SecurityException: JCE cannot authenticate the provider BC
	at javax.crypto.Cipher.getInstance(Cipher.java:642)
	at com.ft.otp.util.alg.RSA.RSA_Decrypt(RSA.java:51)
	at com.ft.otp.manager.lic.decode.LicenseDecode.decodeLic(LicenseDecode.java:101)
	at com.ft.otp.manager.lic.decode.LicenseDecode.getLicenseInfo(LicenseDecode.java:38)
	at com.ft.otp.common.config.LicenseConfig.<init>(LicenseConfig.java:55)
 	at com.ft.otp.common.config.LicenseConfig.loadLicenceInfo(LicenseConfig.java:90)
	at com.ft.otp.core.listener.InitializationLoad.configLoad(InitializationLoad.java:87)
	at com.ft.otp.core.listener.MyServletContextListener.contextInitialized(MyServletContextListener.java:93)
 	at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3392)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850)
	at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
 	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.SecurityException: Cannot verify jar:vfs:/E:/JBoss7/jboss-as-7.1.1.Final/standalone/deployments/otpcenter.war/WEB-INF/lib/bcprov-jdk15-144.jar!/
 	at javax.crypto.JarVerifier.verifySingleJar(JarVerifier.java:406)
	at javax.crypto.JarVerifier.verifyJars(JarVerifier.java:322)
 	at javax.crypto.JarVerifier.verify(JarVerifier.java:250)
	at javax.crypto.JceSecurity.verifyProviderJar(JceSecurity.java:161)
	at javax.crypto.JceSecurity.getVerificationResult(JceSecurity.java:187)
 	at javax.crypto.Cipher.getInstance(Cipher.java:638)
	... 15 more
 Caused by: java.security.PrivilegedActionException: java.util.zip.ZipException: zip file is empty
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.crypto.JarVerifier.verifySingleJar(JarVerifier.java:384)
	... 20 more
 Caused by: java.util.zip.ZipException: zip file is empty
 	at java.util.zip.ZipFile.open(Native Method)
	at java.util.zip.ZipFile.<init>(ZipFile.java:215)
	at java.util.zip.ZipFile.<init>(ZipFile.java:145)
	at java.util.jar.JarFile.<init>(JarFile.java:154)
	at sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:88)
	at sun.net.www.protocol.jar.URLJarFile$1.run(URLJarFile.java:221)
	at sun.net.www.protocol.jar.URLJarFile$1.run(URLJarFile.java:216)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.net.www.protocol.jar.URLJarFile.retrieve(URLJarFile.java:215)
	at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:71)
	at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:109)
 	at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122)
 	at sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:89)
	at javax.crypto.JarVerifier$2.run(JarVerifier.java:399)
	... 22 more
Suppressed: java.nio.file.NoSuchFileException: C:\Users\jjdyr\AppData\Local\Temp\jar_cache998626434137454756.tmp
	at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79)
	at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
	at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
	at sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:269)
	at sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:103)
	at java.nio.file.Files.delete(Files.java:1079)
	at sun.net.www.protocol.jar.URLJarFile$1.run(URLJarFile.java:226)
	... 30 more

异常分析:我这里只贴出了报出的异常部分。首先看 JCE cannot authenticate the provider BC:什么意思呢:JCE无法对提供者BC进行身份验证,那为什么无法验证呢,接着看:Cannot verify jar:vfs:/E:/JBoss7/jboss-as-7.1.1.Final/standalone/deployments/otpcenter.war/WEB-INF/lib/bcprov-jdk15-144.jar!/异常,无法查证bcprov-jdk15-144.jar这个包,看到这里,剩下的异常其实可以不用看了,能够看出来问题主要出现在bcprov-jdk15-144.jar这个包上面。我不知道这个jar包具体的作用,于是简单度娘了一下:意思是bcprov包主要实现了各种加密算法,大概出现此问题的原因就是:(由于自己水平有限,我这里引用了别人的说法,结尾会将引用链接一一说明)

JDK对类似bouncycastle的bcprov-jdk15on-159.jar包是有安全签名认证的,

我理解的意思就是bcprov-jdk15-144这个包没有通过验证,本来想追根朔源把原因讲清楚,但是发现自己水平不够,所以下面先给出自己在网上查到的并且经过本身确认可行的解决方法,等以后成为了大牛再来详细说明吧。

三.解决方法,一共两种,都是实际可行的:

  1. 第一种:从Jboss方面解决:步骤如下
    ①:在jboss的安装目录下的modules/org中创建目录bouncycastle/main,将项目中的bcprov-jdk15-144.jar放入其中,同时需要创建一个module.xml配置文件(可以复制module里其他的module配置文件,然后修改,注意:bcprov-jdk15-144.jar和module.xml都在main目录下),文件内容如下:
<module xmlns="urn:jboss:module:1.1" name="org.bouncycastle">
    <resources>
        <resource-root path="bcprov-jdk15-144.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api" slot="main" export="true"/>
    </dependencies>
</module>

②.找到jboss安装目录中的standalone/configuration/standalone.xml配置文件,并找到这一行:
<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>

2.第二种方法:在项目中解决:在项目的WEB-INF目录下创建jboss-deployment-structure.xml文件,文件内容如下:

<jboss-deployment-structure>
    <deployment>
        <resources>
            <resource-root path="WEB-INF/lib/bcprov-jdk15-144.jar"  use-physical-code-source="true" />
        </resources> 
</jboss-deployment-structure>

四.以上两种解决方法都是亲测可行的,此问题解决方法只针对Jboss7,其他版本的Jboss我没有尝试过。另外,附上我参考的两篇博客:
方法一https://blog.csdn.net/u013355797/article/details/49614275
原因https://blog.csdn.net/study4034/article/details/79632495
方法二的链接我给忘记了,找了半天没找到。
有不对的地方还请读者大牛能够及时评论指正!

  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值