7

我正在使用运行 Java 1.7.0_21 的 Mac 10.7。我正在尝试运行一个已签名的 Java 小程序应用程序,并且在应用程序结束时我收到一个混合模式安全弹出窗口,上面写着“阻止运行可能不安全的组件?”。我使用的所有罐子都已签名。

我能够在运行 Java 6 的 Mac 10.6 上运行相同的小程序应用程序,但没有收到混合模式警告。我还可以在 Windows 上运行应用程序,而不会出现混合模式警告。

当我的所有 jar 都已签名时,为什么我会不断收到此错误?

我搜索了混合模式警告并找到了这个链接。

http://docs.oracle.com/javase/6/docs/technotes/guides/jweb/mixed_code.html#manifest

阅读此链接后,我有点困惑。根据此链接,我似乎需要在清单文件中提及“仅受信任”或“受信任库”属性。我查看了我的清单文件,它们没有这些属性,所以我应该把它们放进去,或者只是罐子签名的事实就足够了。

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

4

4 回答 4

8

Java 7 的更新 21是一个强大的安全更新,它带来了一定数量的重大更改。

你应该看看它的发行说明,有两段和两个与签名 jar 相关的已知问题。

你的问题在于这个:

区域:部署/插件

概要:关闭应用程序时的安全弹出窗口

从 JDK 7u21 开始,在以所有权限运行的签名小程序中调用代码的 JavaScript 代码被视为混合代码,如果签名的 JAR 文件未使用该Trusted-Library=true属性标记,则会引发警告对话框。请参阅混合有权限的代码和没有权限的代码(文档链接)'。

对于以所有权限运行 JavaScript 调用的签名小程序,不应弹出任何安全对话框(带有混合代码警告)。但是,在某些情况下会显示混合代码警告。

好消息:有一个解决方法

作为一种解决方法,如果小程序 jar 以所有权限运行并使用“Trusted-library:true”属性作为清单条目,则不会弹出混合代码警告。

于 2013-04-18T00:51:18.660 回答
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 隐藏安全警告并在出现混合代码条件时运行小程序。此外,在发行说明中它说:

从 JDK 7u21 开始,在特权小程序中调用代码的 JavaScript 代码被视为混合代码,如果签名的 JAR 文件未使用 Trusted-Library 属性标记,则会引发警告对话框。

有关详细信息,请参阅混合特权代码和沙盒代码文档。

JDK 7u21 版本通过在运行 RIA 之前提示用户提供权限,使用户能够在运行富 Internet 应用程序 (RIA) 之前做出更明智的决定。这些权限对话框包括有关用于签署应用程序的证书、应用程序的位置以及应用程序请求的访问级别的信息。有关详细信息,请参阅 RIA 的用户接受度。

仅供参考,JRE 6u19 如果小程序同时包含特权组件和沙盒组件,则会显示警告对话框。

于 2013-04-18T15:08:50.613 回答
2

我还有一个从 JRE 1.7.0_21 开始生成此安全警告的小程序。

这是我学到的。如果您不希望用户被询问他是否允许调用另一个签名的 jar,那么您可以将“Trusted-Only:true”放入您的小程序清单中。呼叫将被阻止而没有安全警告。您添加到您正在调用的 jar 中的“Trusted-Library:true”。如果这是在 jar 的清单中并且 jar 已签名,那么当您的小程序调用它时,将不会有安全警告,并且不会阻止调用。

我的小程序使用 swing-layout-1.0.4.jar。为了解决这个问题,我不得不将“Trusted-Library: true”添加到 swing-layout-1.0.4.jar 中。您应该能够通过使用 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 安装的一部分(在平台下)。我解压缩它作为一个项目打开它。在文件下,我将清单文件更改为具有魔术线(同样重要的是在 : 之后有空格并在清单文件末尾有一个空白行)并点击构建。然后我在罐子上签名,没有更多的安全警告。

我希望这会有所帮助或至少为您指明正确的方向

于 2013-04-19T14:08:45.723 回答
1

谢谢大家的回复。我尝试在一个小样本上添加 Trusted-Library=true ,它似乎有效。所以现在我将尝试更新我所有 jar 的清单文件。由于我们使用 ant,我将执行以下操作

        <jar update="true" jarfile="${deploy.dir}/javaApp.jar">
            <manifest>
                <attribute name="Trusted-Library" value="true" />
            </manifest>
        </jar>

更新清单文件。

于 2013-04-19T15:36:09.987 回答