在处理不同的问题(与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的类似标题的文章根本没有任何帮助。
答案 0 :(得分:49)
答案 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之前,则可能会弹出此错误。