java.lang.SecurityException: 执行此操作需要签名的颁发者签署管辖策略文件。

44

在解决一个与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
在异常消息中使用感叹号让我笑了。 - Pluto
5个回答

52

4
或者,(沉重的叹气)真正的罪魁祸首是工作太晚了:我已经下载了正确的文件,但安装了错误的文件!(皱眉)哦,好吧,我不应该工作这么长时间,我想。 - Richard T
即便我替换了JRE中的Jars,仍会出现同样的错误。我正在Websphere上运行JRE 1.7.32。我按照这些步骤进行操作。http://www-01.ibm.com/support/docview.wss?uid=swg21635319 当我使用"Unrestricted SDK JCE Policy files for Java 5.0 SR16, Java 6 SR13, Java 7 SR4 and later versions"的Jars时,我会得到一个Caused by:**Java.lang.SecurityException: Jurisdiction policy files are not signed by trusted signers!**即使我替换了jar文件,我确定这与安全签名有关。请问有人可以告诉我如何解决这个问题吗? - bks4line
你们能帮我吗?或者你们能推荐一个WebSphere支持论坛吗? - bks4line
@bks4line,听起来你的问题可能需要一些关于IBM的JRE特定知识。你应该发布一个新的问题,重点关注IBM。 - erickson
当然,@RichardT,我会看一下的。 - bks4line
显示剩余3条评论

20

按照下载中的README.txt安装对于Ubuntu 16.10上的OpenJDK 1.8.0_111没有任何效果。 - Kalle Richter

8

可能你安装了不同版本的JDK。例如,如果JAVA_HOME指向版本7,但是在你的路径中版本6比版本7先出现,那么就可能会出现这个错误。


2
这是一个很好的提示。我的JAVA_HOME甚至没有设置,一旦我设置了它,这个错误就消失了。感谢我读到了这里,因为顶部的答案更加复杂,可能无法解决我的问题。 - Dan

4

如果类路径中有标准策略jar文件,则可能会出现此问题。我建议在计算机上查找并替换所有local_policy.jar和us_export_policy.jar文件,使用这些jar的无限制版本。如果您正在使用IBM的WAS/Portal Server/RAD,则可以在此处找到无限制的JCE策略jars


我必须下载旧版本的无限制SDK JCE策略文件。 https://www-01.ibm.com/marketing/iwm/iwm/web/reg/download.do?source=jcesdk&lang=en_US&S_PKG=13_01&cp=UTF-8 http://www-01.ibm.com/support/docview.wss?uid=swg21635319 - David García González

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接