java.lang.SecurityException:管辖区策略文件不是由受信任的签名者签名的

2022-09-01 00:55:43

在处理另一个问题(与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...]

嗯,跆拳道?唯一的变化是我把原始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。

附言:在这里找到的类似标题的文章根本没有帮助。


答案 1

不应混合运行时和策略文件版本,而应使用适用于 Java 7 的策略文件。


答案 2

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

Java 的策略罐 8
Java 的策略罐 7
Java 的策略罐 6 的策略罐


推荐