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

Posted

技术标签:

【中文标题】java.lang.SecurityException:管辖权策略文件未由受信任的签名者签名【英文标题】:java.lang.SecurityException: The jurisdiction policy files are not signed by a trusted signer 【发布时间】:2012-04-02 11:08:12 【问题描述】:

在处理不同的问题(与 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.xml 中添加了无限制的 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。

附: here找到的同名文章,一点帮助都没有。

【问题讨论】:

在异常消息中使用感叹号让我哈哈大笑 【参考方案1】:

您应该使用the policy files for Java 7.,而不是混合运行时和策略文件版本

【讨论】:

哦,我的 Friggen Gawd,我确定尝试获取最新版本,但很恼火我只找到了 v 6。我尝试了几次以确保我得到了最新版本。我怎么会错过它而你找到它?!@?!哦,好吧,我将这归咎于 Oracle 没有最清晰的下载站点! -眨眼!-再次感谢。 或者,-heavy-sigh- 真正的罪魁祸首工作太晚了:我已经下载了正确的,但安装了错误的! -皱眉-哦,好吧,我不应该工作这么长时间,我想。 即使在我的 JRE 中替换了 Jars 之后,我也遇到了同样的错误。我在我的 Websphere 中运行了 JRE 1.7.32。我遵循了这些步骤。 www-01.ibm.com/support/docview.wss?uid=swg21635319 当我使用罐子“Java 5.0 SR16、Java 6 SR13、Java 7 SR4 和更高版本的不受限制的 SDK JCE 策略文件”时,我得到原因:Java.lang。 SecurityException: 管辖权政策文件未由受信任的签名者签名! 即使在替换 jar 之后也是如此。我确信安全签名者存在一些问题。谁能告诉我解决方法? 你们能帮帮我吗?或者你们能推荐一个 websphere 支持论坛吗? @bks4line 听起来您的问题可能需要一些特定于 IBM 的 JRE 的知识。您应该发布一个新问题,重点关注 IBM。【参考方案2】:

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

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

【讨论】:

在下载中安装README.txt 对 Ubuntu 16.10 上的 OpenJDK 1.8.0_111 没有任何影响。【参考方案3】:

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

【讨论】:

我必须下载旧版本的 Unrestricted SDK JCE 策略文件 www-01.ibm.com/marketing/iwm/iwm/web/reg/… www-01.ibm.com/support/docview.wss?uid=swg21635319【参考方案4】:

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

【讨论】:

这是一个很好的提示。我的 JAVA_HOME 甚至没有设置,一旦我设置它,这个错误就消失了。感谢我在这里阅读,因为最重要的答案涉及更多,可能不会为我解决问题。【参考方案5】:

在更改本地或服务器中的版本时, 您应该将原始 jre/lib/security 文件夹复制为 security8 并删除引用 efs 的 cacerts,而不是从旧的 security8 复制。 这对我有用。

【讨论】:

以上是关于java.lang.SecurityException:管辖权策略文件未由受信任的签名者签名的主要内容,如果未能解决你的问题,请参考以下文章