java.lang.SecurityException:权限策略文件未由受信任的签名者签名


问题内容

在处理另一个问题(与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?唯一的变化是我将原始jar文件移到了一边,并在$ JAVA_HOME / lib /
security中添加了无限的jar文件。该目录现在如下所示:

$ 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。

PS:此处找到的类似标题的文章完全没有帮助。


问题答案:

您应该将策略文件用于Java
7
,而不是混合运行时和策略文件版本