java.lang.SecurityException:管辖区策略文件未由可信签署者签名

时间:2012-03-16 22:15:49

标签: java jsse

在处理不同的问题(与RMI相关)时,我使用“无限强度”策略文件升级了系统的“安全文件夹”,现在我的应用程序以不同的方式失败。我得到一个很长的堆栈转储,其后面的位似乎是相关的:

Exception in thread "main" java.lang.ExceptionInInitializerError

[...crop...]

Caused by: java.lang.SecurityException: Can not initialize cryptographic mechanism
        at javax.crypto.JceSecurity.<clinit>(JceSecurity.java:86)
        ... 17 more
Caused by: java.lang.SecurityException: The jurisdiction policy files are not signed by a trusted signer!

[...crop...]
呃,WTF?唯一的变化是我将orignal jar文件放在一边,并在$ JAVA_HOME / lib / security中添加了无限制的文件。该目录现在看起来像这样:

$ ls
blacklist      javaws.policy               trusted.libraries
cacerts        local_policy.jar            US_export_policy.jar
java.policy    local_policy.jar.strong     US_export_policy.jar.strong
java.security  local_policy.jar.unlimited  US_export_policy.jar.unlimited

当然,.strong和.unlimited版本都在那里,所以我可以快速切换回来。

方向简短明了,似乎他们只能设想替换这两个文件(local_policy.jar和US_exportpolicy.jar)。

还有什么可做的?

请注意,java和策略文件的版本是迄今为止最年轻的版本:1.7.0_03和jce_policy-6。

P.S。发现here的类似标题的文章根本没有任何帮助。

4 个答案:

答案 0 :(得分:49)

您应该使用the policy files for Java 7.

,而不是混合运行时和策略文件版本

答案 1 :(得分:14)

当Java版本与策略文件版本不匹配时,会发生这种情况。您可以从以下链接下载相关的策略文件。

Policy jars for Java 8
Policy jars for Java 7
Policy jars for Java 6

答案 2 :(得分:4)

如果类路径中的某处存在标准策略jar文件,则可能会发生这种情况。我建议在您的机器中查找并替换所有local_policy.jar和us_export_policy.jar文件以及这些jar的无限制版本。如果您使用的是IBM的WAS / Portal Server / RAD,那么这里是指向不受限制的JCE策略jars的链接。

答案 3 :(得分:4)

您可能拥有不同版本的JDK。例如,如果您的JAVA_HOME指向版本7,但在您的路径版本6中显示在版本7之前,则可能会弹出此错误。