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

Ric*_*d T 42 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...]
Run Code Online (Sandbox Code Playgroud)

嗯,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
Run Code Online (Sandbox Code Playgroud)

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

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

还需要做什么?

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

PS 这里发现的类似标题的文章根本没有任何帮助.

eri*_*son 50

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

  • 或者,重 - 叹气 - 真正的傻瓜工作太晚了:我已经下载了正确的傻瓜,但安装错了!-frown-哦,好吧,我不应该这么长时间工作,我想. (2认同)

pra*_*eth 16

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

适用
于Java 7的策略jar适用于Java 7的
策略jar适用于Java 6的策略jar


Som*_*era 7

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

  • 这是一个很好的提示。我的 JAVA_HOME 甚至没有设置,一旦我设置了它,这个错误就消失了。谢天谢地,我在这里读到了,因为最重要的答案涉及更多,可能不会为我解决问题。 (2认同)