在解决一个与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。
附注:类似标题的文章在此处找到,一点也没有帮助。