Java `运行JAR时,JCE无法对提供程序BC`进行身份验证
在我的scala项目中,我使用Java `运行JAR时,JCE无法对提供程序BC`进行身份验证,java,scala,jar,bouncycastle,Java,Scala,Jar,Bouncycastle,在我的scala项目中,我使用“org.bouncycastle”%“bcprov-jdk14”%“1.51”进行加密。 如果它在Scala IDE中测试我的项目,它就可以正常工作。但一旦我创建了一个JAR并尝试通过java-JAR运行它…它就会抛出一个异常:线程“main”java.lang中的异常。安全异常:JCE无法验证提供者BC 我用它来制作一个JAR,下面是我的java-version输出: java version "1.7.0_72" Java(TM) SE Runtime Env
“org.bouncycastle”%“bcprov-jdk14”%“1.51”
进行加密。如果它在Scala IDE中测试我的项目,它就可以正常工作。但一旦我创建了一个JAR并尝试通过
java-JAR运行它…
它就会抛出一个异常:线程“main”java.lang中的异常。安全异常:JCE无法验证提供者BC
我用它来制作一个JAR,下面是我的java-version
输出:
java version "1.7.0_72"
Java(TM) SE Runtime Environment (build 1.7.0_72-b14)
Java HotSpot(TM) Server VM (build 24.72-b04, mixed mode)
[info] Merging files...
[warn] Merging 'META-INF/BCKEY.DSA' with strategy 'discard'
[warn] Merging 'META-INF/BCKEY.SF' with strategy 'discard'
[warn] Merging 'META-INF/LAMBDAWO.SF' with strategy 'discard'
[warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard'
[warn] Merging 'reference.conf' with strategy 'concat'
[warn] Merging 'rootdoc.txt' with strategy 'concat'
[warn] Strategy 'concat' was applied to 2 files
[warn] Strategy 'discard' was applied to 4 files
制作罐子时,我看到以下输出:
java version "1.7.0_72"
Java(TM) SE Runtime Environment (build 1.7.0_72-b14)
Java HotSpot(TM) Server VM (build 24.72-b04, mixed mode)
[info] Merging files...
[warn] Merging 'META-INF/BCKEY.DSA' with strategy 'discard'
[warn] Merging 'META-INF/BCKEY.SF' with strategy 'discard'
[warn] Merging 'META-INF/LAMBDAWO.SF' with strategy 'discard'
[warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard'
[warn] Merging 'reference.conf' with strategy 'concat'
[warn] Merging 'rootdoc.txt' with strategy 'concat'
[warn] Strategy 'concat' was applied to 2 files
[warn] Strategy 'discard' was applied to 4 files
如何解决此问题?检查sbt程序集是否在生成的jar(META-INF/中)中未包含数字签名文件,因为它们将随着jar更改而变得无效,因此需要排除它们。或者,您可能需要找到一种方法,从它的“真实”jar加载bcprov,因为该jar已签名。@lmm如何排除META-INF/文件?此外,我还用一些相关的(我想)汇编输出更新了我的帖子。也许这会进一步澄清发生了什么。看起来签名被丢弃了,这比包含它们但让它们无效要好。对我来说,这表明您需要一个有效的签名,该签名由例如确认。因此,不能将sbt汇编与bcprov一起使用;您必须找到一种方法来使用未修改的bcprov JAR。@谢谢,我在您提供的一个线程中找到了一个解决方案,即此注释:。奇怪的是,由于某种原因,它被否决了。也许这是一种不好的做法还是什么?我认为更多的是,对于许多部署模型来说,它不太实用,因为您必须修改JRE本身。