Java BouncyCastle问题:一个tomcat中有多个Web应用程序

Java BouncyCastle问题:一个tomcat中有多个Web应用程序,java,tomcat,jakarta-ee,bouncycastle,Java,Tomcat,Jakarta Ee,Bouncycastle,我们与BouncyCastle安全提供商有问题。我们在两个不同的Web应用程序中使用它,但它们是由一个tomcat部署的。 我们在java.security.security-Class中的位置1注册BC提供程序 这两个webapp都找到了正确的SecurityProvider,但第一个注册了BC的webapp似乎拥有它的“所有权” 第二个webapp尝试加载密钥库,如下代码所示: if (Security.getSecurityProvider("BC") == null){ keySt

我们与BouncyCastle安全提供商有问题。我们在两个不同的Web应用程序中使用它,但它们是由一个tomcat部署的。 我们在java.security.security-Class中的位置1注册BC提供程序

这两个webapp都找到了正确的SecurityProvider,但第一个注册了BC的webapp似乎拥有它的“所有权”

第二个webapp尝试加载密钥库,如下代码所示:

if (Security.getSecurityProvider("BC") == null){
   keyStore = java.security.KeyStore.getInstance("PKCS12");
}else{
   keyStore = java.security.KeyStore.getInstance("PKCS12", Security.getSecurityProvider("BC"));
}   
keyStore.load(in, this.pin);
然后在
keyStore.load(in,this.pin)发生以下异常:

java.io.IOException:构造MAC:java.security.invalidalgorithParameterException:不适当的参数类型:javax.crypto.spec.PBEParameterSpec时出错 位于org.bouncycastle.jcajce.provider.keystore.pkcs12.pkcs12keystrespi.engineLoad(pkcs12keystrespi.java:839) 加载(KeyStore.java:1445)

我们有这个问题,因为我们使用的是java8/tomcat8-java7/tomcat7工作得很好。 所以我们的假设是,这是由Tomcat8中类装入器机制的变化引起的。 在单独的tomcats中部署webapp不是我们的选择


谢谢您的帮助。

我使用

Provider provider = new BouncyCastleProvider();
而不是

Provider provider = Security.getSecurityProvider("BC");

如果需要,您可以将实例化移动到静态字段,以便只执行一次。考虑到这个问题花费了我多少时间,尝试用正确的类加载器加载BC非常简单,而且每次新安装都必须再次处理它。

您可以选择将BC provider jar安装为扩展库(以$JRE/lib/ext为单位)?