java.lang.SecurityException:无法为受信任的CA设置证书(JBoss AS 7)

时间:2013-02-12 19:23:17

标签: java jboss module javax.crypto

(使用eclipse)

我正在使用第三方提供的JAR课程。第三方JAR有这条线:

var = Cipher.getInstance("AES");

当执行此行时,它会抛出以下堆栈跟踪:

13:38:00,120 ERROR [stderr] (EJB default - 1) java.lang.ExceptionInInitializerError
13:38:00,121 ERROR [stderr] (EJB default - 1)   at javax.crypto.Cipher.getInstance([DashoPro-V1.2-120198])

...
BLAH BLAH BLAH 
(Stack trace which leads all the way down to the call I make through the third party jar)
...

13:38:00,154 ERROR [stderr] (EJB default - 1) Caused by: java.lang.SecurityException: Cannot set up certs for trusted CAs
13:38:00,154 ERROR [stderr] (EJB default - 1)   at javax.crypto.b.<clinit>([DashoPro-V1.2-120198])
13:38:00,155 ERROR [stderr] (EJB default - 1)   ... 55 more

以前,我通过将其粘贴到我的eclipse项目中的文件夹中,然后将JAR添加到我的构建路径和部署程序集中来访问此JAR。

但是,因为我们希望两个不同的部署使用从第三方jar初始化的对象的相同实例,所以决定将第三方JAR移动到JBoss AS 7“模块”

我们在构建路径中的项目中维护了对JAR的引用,但是将其从部署程序集中删除了。我还添加了“依赖关系:com ... [模块中指定的路径]”

这似乎有效,因为项目将构建和部署。

但是,每当我尝试调用已被调用数十万次的方法时,我就会遇到此异常。

异常似乎是在SunJCE_b.class的静态初始化期间抛出的,但我完全不确定。

这是第一次抛出SecurityException时的堆栈:

b.e() line: not available   
b.clinit() line: not available  
Cipher.getInstance(String) line: not available  
OtherCompanyCryptography.getCipherInstance() line: not available    

我在网上找不到任何对javax.crypto.b.e()的引用。

以前这是如何工作的,但当我把它变成JBoss模块时,它停止了工作?

另外,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

首先,您提供了有关两种不同JVM的信息:

  1. SunJCE_b类来自Oracle(Sun)JVM
  2. javax.crypto.b类来自IBM JVM
  3. 特别是他们正在做同样的事情。他们负责验证加密组件签名。 在大多数情况下,这种堆栈跟踪是由类路径上的错误管辖区策略文件引起的。然后在IBM JVM上,您可以在堆栈跟踪中看到:

    Caused by: java.lang.SecurityException: Jurisdiction policy files are not signed by trusted signers! 
    at javax.crypto.b.a
    

    另一个原因可能是加密提供程序具有无效(或旧)签名。如果您提供更详细的堆栈跟踪,那么我将能够提供更多帮助。

答案 1 :(得分:0)

亲爱的未来的人们:

我们最终使用的解决方法是将第三方jar打包到一个单独的项目中,我们称之为ApiCommons。

然后我们创建了一个名为ApplicationBundle.ear

的组合应用程序

ApplicationBundle.ear包含我们想要使用相同对象的两个部署模块,通过JNDI在两者之间共享。

ApplicationBundle项目在其“部署程序集”

中包含ApiCommons中的jar

我们能够将两个部署模块保持为单独的eclipse项目,但是它们部署在单个.EAR文件中,并且两个捆绑项目在其构建路径上都有ApiCommons,但不是它们的部署程序集。