0

我的应用程序验证许可证文件以使其正常工作。它通过调用 javax.crypto.Cipher.getInstance("DES","SunJCE") 来破译许可证密钥文件。

当我在本地运行我的应用程序时,一切正常,但是当我使用 jboss 部署我的应用程序并到达要验证 servlet 上的许可证文件的地步时,我收到以下错误:

java.lang.SecurityException: JCE cannot authenticate the provider SunJCE
  at javax.crypto.Cipher.getInstance(DashoA13*..)
  at javax.crypto.Cipher.getInstance(DashoA13*..)

就像我说的,它在命令提示符和 Eclipse 中运行良好,但不能作为 jboss 上的 servlet。有人知道我需要做什么吗?我使用 jdk 1.6 和 jboss 作为 7。

谢谢

4

2 回答 2

1

想到了几个可能的问题,当 sun/oracle jvm 尝试对提供程序 jar 进行身份验证时,这似乎是类路径的问题

  • 检查所有安全 jar 是否在<jdk_home>/jre/lib/ext运行 jboss 的 jvm 下(即 US_export_policy.jar、sunjce_provider.jar、local_policy.jar ....)

  • 关于 US_export_policy.jar 和 local_policy.jar 一定要下载无限制版本

  • java.security 文件中<jdk_home>/jre/lib/security:确保有类似于security.provider.X=com.sun.crypto.provider.SunJCEX 是数字的行

  • 确保 sunJCE 提供程序 jar 不在您的 WEB-INF/lib 中

于 2011-08-03T21:10:16.860 回答
1

我发现我的代码出了什么问题。由于某种原因,在代码的前面有人做了以下事情:

if (SunJCEinProviders) 
{
Security.removeProvider("SunJCE");
}   

int i = Security.insertProviderAt(new  com.sun.crypto.provider.SunJCE(),1);

因此,出于某种原因,我们删除了 java 的初始 SunJCE 提供程序,然后添加了一个新的提供程序,而这个新的提供程序未能通过身份验证。

于 2011-08-04T21:47:43.830 回答