我正在尝试做一件本来应该是微不足道的事情,但我却面临着一个问题。
在将JavaFx应用程序从Java8迁移到Java11(也尝试了Java12,结果相同)之后,bouncy castle安全提供程序不会加载。这是一个Maven项目,我对其进行了更新,以使用符合Java11的插件。它编译得很好,但运行时,我在终端窗口中得到了以下信息:
jar.launcher java.lang.reflect.InvocationTargetException(java.base/jdk.internal.reflect.nativeMethodAccessorImpl.Invoke0(原生方法)(java.base/jdk.internal.reflect.nativeMethodAccessorImpl.Invoke)(nativeMethodAccessorImpl.java:62)(java.base/jdk.internal.reflect.delegatingMethodAccessorImpl.java:43)(cherhelper$fxhelper.main(launcherhelper.java:1051)由:java.lang.nclassdeffounderror:org/bouncycastle/jce/provider/bouncycastleprovider在.launcher.main(launcher.java:14)...11其他原因:java.lang.classnotfoundexception:org.bouncycastle.jce.provider.bouncycastleprovider在java.base/jdk.internal.loader.builtinclassloader.loadclass(
在java.security中,我将bouncy castle提供程序作为第一个提供程序(也尝试将其作为最后一个提供程序,但结果相同)
#
# List of providers and their preference orders (see above):
#
security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider
security.provider.2=SUN
security.provider.3=SunRsaSign
security.provider.4=SunEC
security.provider.5=SunJSSE
security.provider.6=SunJCE
security.provider.7=SunJGSS
security.provider.8=SunSASL
security.provider.9=XMLDSig
security.provider.10=SunPCSC
security.provider.11=JdkLDAP
security.provider.10=JdkSASL
security.provider.11=Apple
security.provider.12=SunPKCS11
并且在我的代码中有以下内容(在我过去测试从Java8升级到9或10时,这些内容工作得很好):
//Since Java 9 we set the unlimited crypto policy in code, not by applying the JCE jars.
Security.setProperty("crypto.policy", "unlimited");
//verify that JCE is applied
// init the BC security provider
if (Security.getProvider("BC") == null) {
Security.insertProviderAt(new BouncyCastleProvider(), 0);
logger.info("Security provider added successfully");
}
Bouncy castle jar是bcprov-jdk15on-1.61(Bouncy castle provider 1.61版)和bcpkix-jdk15on-1.61.jar。住在正确的地方。
我用来启动JavaFx应用程序的命令行是
java-cp lib-module-path mods-add-modules=javafx.controls、javafx.fxml、javafx.graphics、javafx.web、javafx.swing-jar.launcher,并确保mods和lib位于正确的位置并且可以被jar访问。
我在StackOverflow.com中看到了几个与此类似的问题,但我尝试了提供的解决方案,但它们没有解决问题。
我认为您应该(如果还没有完成的话)重试一下BouncyCastle 1.66:它是一个带有模块信息的多版本JAR。
我使用的依赖项:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.66</version>
</dependency>
您可以使用-djava.Security.debug=JCA
为JCA启用调试模式(请参见安全故障排除)。
security.provider.14=org.bouncycastle.jce.provider.BouncyCastleProvider
在我的AdoptOpenJDK 11安装的${JAVA_HOME}/conf/security/java.security
中。BouncyCastle是由Maven作为scope=compile依赖项提供的。
这段简单的代码:
for (final Provider provider : Security.getProviders()) {
System.out.println("provider: " + provider.getName());
}
显示bc
已加载。
if (Security.getProvider("BC") == null) {
Security.insertProviderAt(new BouncyCastleProvider(), 0);
logger.info("Security provider added successfully");
}
文档说明security.insertProviderat
:
在指定位置添加新提供程序。该位置是为请求的算法搜索提供程序的首选顺序。职位以1为主,即最优先选择1,其次是2,以此类推。
如果您传递0,这与调用security.addProvider(Provider)
相同,您的提供程序将位于末尾(请参阅ProviderList)。
你好Stackoverflow社区, 在尝试编译使用bouncycastle安全提供程序的maven项目时,我得到了以下错误:我知道必须对jar进行签名,因此我将此添加到pom.xml中以防止编译错误: 基于此(bouncycastle provider找不到算法所需的类),我添加了以下内容:,并且在公共静态void main中添加了具有以下内容的提供程序:。 不幸的是,这没有奏效。对于如何实现上
在Java8中,我通过执行以下步骤全局注册了Bouncy Castle安全提供程序: null
我有一个使用bouncycastle库的Java applet。当我在Eclipse上运行应用程序时,一切正常,但当我在带有标记的浏览器上使用applet时,当我添加安全BouncyCastleProvider时,它会引发异常。 我的stackTrace是: 我正在使用bcpkix-jdk15on-1.48.jar和bcprov-jdk15on-1.48.jar版本的BouncyCastle。为什
JCA提供者提出的解决方案是将JAR放在jre/lib/ext文件夹中,但不是从那里加载的。据我所知,这是由于OSGi(Eclipse equinox)类加载器策略将bootstrap类加载器作为每个bundle类加载器的父类,从而排除了从jre/lib/ext文件夹加载的扩展类加载器。即。在jre/lib/ext文件夹中没有一个bundle可以看到任何东西。 是否有一种方法可以让Eclipse
问题内容: 我正在尝试使用bouncycastle使用公共密钥来加密文件。我已经通过编程方式注册了提供程序: 我成功创建了公共密钥对象。 当我使用PGPEncryptedDataGenerator和密钥加密文件时,出现ClassNotFound异常。 似乎提供程序在运行时找不到此类,尽管我确定我有它的jar … 我在Tomcat上运行我的应用程序。使用Maven处理依赖关系- 我放入的充气城堡ja
我的配置是: < li>Grails框架3.0.11 < Li > " org . grails . plugins:spring-security-core:3 . 0 . 3 " < Li > " org . grails . plugins:spring-security-oauth 2-provider:3 . 0 . 0-RC1 " 我已经指定了我的自定义用户详细信息服务(实现Grail