Java弹出窗口说应用程序包含无符号和签名代码

时间:2013-04-17 20:04:59

标签: java security warnings mode mixed-code

我正在使用运行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”属性。我查看了我的清单文件,他们没有这些属性,所以我应该把它们放进去,或者只是罐子签名应该已经足够了。

有人可以帮助我理解为什么即使所有内容都签名都会收到此错误吗?

4 个答案:

答案 0 :(得分:8)

Java 7的

更新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>

更新清单文件。