Java BouncyCastle问题:一个tomcat中有多个Web应用程序
我们与BouncyCastle安全提供商有问题。我们在两个不同的Web应用程序中使用它,但它们是由一个tomcat部署的。 我们在java.security.security-Class中的位置1注册BC提供程序 这两个webapp都找到了正确的SecurityProvider,但第一个注册了BC的webapp似乎拥有它的“所有权” 第二个webapp尝试加载密钥库,如下代码所示: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
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为单位)?