我正在使用运行Java 1.7.0_21的Mac 10.7。我正在尝试运行已签名的Java applet应用程序,并且在应用程序结束时,我得到一个混合模式安全弹出窗口“阻止可能不安全的组件被运行?”。我正在使用的所有罐子都已签名。
我可以在运行Java 6的Mac 10.6上运行相同的applet应用程序,但我没有得到混合模式警告。我也可以在Windows上运行应用程序而不会出现混合模式警告。
为什么我的所有罐子都签名后会一直收到此错误?
我用Google搜索混合模式警告并找到此链接。
http://docs.oracle.com/javase/6/docs/technotes/guides/jweb/mixed_code.html#manifest
阅读此链接后,我有点困惑。根据此链接,我看起来需要在清单文件中提到“Trusted-Only”或“Trusted-Library”属性。我查看了我的清单文件,他们没有这些属性,所以我应该把它们放进去,或者只是罐子签名应该已经足够了。
有人可以帮助我理解为什么即使所有内容都签名都会收到此错误吗?
答案 0 :(得分:8)
更新21 是一项强大的安全更新,它带来了一定数量的重大变化。
您应该查看其release notes,有两个段落和两个与已签名的罐子相关的已知问题。
你的问题在于:
区域:deploy / plugin
概要:关闭应用程序时弹出窗口
从JDK 7u21开始,在具有所有权限的已签名applet中调用代码的JavaScript代码被视为混合代码,如果签名的JAR文件未使用
Trusted-Library=true
属性进行标记,则会引发警告对话框。请参阅使用权限混合代码和无权限的代码(文档链接)'。对于运行了JavaScript调用的所有权限的已签名applet,不会弹出安全对话框(带有混合代码警告)。但是在某些情况下会显示混合代码警告。
好消息:有解决方法:
作为一种解决方法,如果applet jar以所有权限运行并使用“Trusted-library:true”属性作为清单条目,则不会弹出混合代码警告。
答案 1 :(得分:2)
最好的解决方法是使用Trusted-Library=true
,但是,如果由于某种原因无法使其工作,您还可以更改计算机处理混合安全小程序的方式。
http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/properties.html
在用户工作站上创建关注文件。 C:\Windows\Sun\Java\Deployment\deployment.properties
在文件中添加以下行:
deployment.security.mixcode="HIDE_RUN"
这将告诉Java隐藏安全警告并在混合代码条件下运行applet。另外,在发行说明中它说:
从JDK 7u21开始,JavaScript代码在特权范围内调用代码 如果将applet视为混合代码,则会引发警告对话框 签名的JAR文件未使用Trusted-Library属性进行标记。
有关详细信息,请参阅混合特权代码和沙盒代码 文档。
JDK 7u21版本使用户能够做出更明智的决策 在通过提示用户运行富Internet应用程序(RIA)之前 在运行RIA之前获得权限。这些权限对话框包括 有关用于签署申请的证书的信息, 应用程序的位置,以及访问级别 申请要求。有关更多信息,请参阅用户接受 的RIA。
仅供参考,JRE 6u19如果applet同时包含特权组件和沙箱组件,则会显示警告对话框。
答案 2 :(得分:2)
我还有一个小程序,从JRE 1.7.0_21开始生成此安全警告。
这是我所学到的。如果您不希望询问用户是否允许调用另一个已签名的jar,那么您将放入applet清单中的“Trusted-Only:true”。如果没有安全警告,呼叫将阻止。您添加到正在调用的jar中的“Trusted-Library:true”。如果这是在jar的清单中并且jar已经签名,那么当你的applet调用它时,将没有安全警告,并且不会阻止该调用。
我的applet使用swing-layout-1.0.4.jar。要解决这个问题,我必须在swing-layout-1.0.4.jar中添加“Trusted-Library:true”。您应该可以使用JDK中的jar.exe应用程序来执行此操作。
jar vcmf swing-layout-1.0.4a.jar MyManifest.mf swing-layout-1.0.4.jar
MyManifest.mf是一个包含“Trusted-Library:true”的文本文件。 :和true之间的空格很重要,你必须在该行的末尾有一个回车符。
出于某种原因,我无法让这个工作,所以我使用netbeans重建了swing-layout。 swing-layout-1.0.4的源代码是netbeans安装的一部分(在平台下)。我解压缩它打开它作为一个项目。在文件下,我将清单文件更改为具有魔术线(同样重要的是在清单文件末尾有一个空白行后面的空格)并点击构建。然后我签了罐子,没有更多安全警告。
我希望这有助于或至少指出你正确的方向
答案 3 :(得分:1)
谢谢大家的回复。我尝试在一个小样本上添加Trusted-Library = true,它似乎有效。所以现在我将尝试更新所有罐子的清单文件。由于我们使用ant,我将执行以下操作
<jar update="true" jarfile="${deploy.dir}/javaApp.jar">
<manifest>
<attribute name="Trusted-Library" value="true" />
</manifest>
</jar>
更新清单文件。