【发布时间】:2017-06-16 09:40:55
【问题描述】:
我们遇到了 BouncyCastle 安全提供程序的问题。我们在两个不同的 web 应用程序中使用它,但它们是由一个 tomcat 部署的。 我们在 java.security.Security-Class 的位置 1 注册 BC-provider。
两个 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.InvalidAlgorithmParameterException:不适当的参数类型:javax.crypto.spec.PBEParameterSpec 在 org.bouncycastle.jcajce.provider.keystore.pkcs12.PKCS12KeyStoreSpi.engineLoad(PKCS12KeyStoreSpi.java:839) 在 java.security.KeyStore.load(KeyStore.java:1445)
我们遇到了这个问题,因为我们使用的是 java8/tomcat8 - java7/tomcat7 工作正常。 所以我们的假设是,这是由 tomcat 8 中类加载器机制的变化引起的。 在单独的 tomcat 中部署 webapp 对我们来说不是一个选择...
感谢您的帮助。
【问题讨论】:
-
是否可以选择将 BC 提供程序 jar 安装为扩展库(在 $JRE/lib/ext 中)?
标签: java tomcat jakarta-ee bouncycastle