2

我在内部自签名小程序上收到可怕的 LiveConnect 警告。我正在使用 Java 1.7.0_45。根据我所阅读的内容,我应该能够通过将 Caller-Allowable-Codebase * 添加到我的清单并删除 Trusted-Library 属性来摆脱这些。我构建小程序的 ant 目标如下所示:

<jar destfile="MyApplet.jar">
  <manifest>
    <attribute name="Main-Class" value="com.mycompany.MyApplet"/>
    <attribute name="Permissions" value="all-permissions"/>
    <attribute name="Codebase" value="*"/>
    <attribute name="Caller-Allowable-Codebase" value="*"/>
  </manifest>
  [...]
</jar>
<signjar jar="MyApplet.jar" [...] />

不幸的是,这没有效果;我仍然收到警告。我已经验证我运行的是 1.7.0_45,并且浏览器没有使用旧的缓存副本小程序。客户端是在 OS X 10.7.5 上运行的 Firefox 25.0,它的价值……任何想法将不胜感激!

4

3 回答 3

2

我观察到了同样的行为。我的测试表明 Caller-Allowable-Codebase 清单属性只有在 JAR 由受信任的证书签名时才会生效。(我用不受信任的证书签署了一个 JAR,出现了警告。我用受信任的证书签署了同一个 JAR,但没有出现警告)。

如果您无法使用来自已受信任 CA 的证书,您可能会尝试将本地 Java 安装配置为信任您的证书,或使用部署规则集来抑制警告。

于 2013-11-13T15:40:04.487 回答
2

找到了——诀窍是将证书导入正确的密钥库。我从用于构建小程序的钥匙串中导出了证书:

keytool -exportcert -file appletkey.cer -alias appletkey -keystore mykeystore

...然后将其导入全局 cacerts 密钥库:

keytool -importcert -file appletkey.cer -alias appletkey -keystore $JRE_HOME/lib/security/cacerts -storepass changeit

棘手的部分是弄清楚要将它导入到哪个cacerts实例;根据配置,您可能安装了一大堆 JVM,每个 JVM 都有自己的 cacerts。在 Mac 上,正确的结果是

/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts

在 Windows 中是

C:\Program Files (x86)\Java\jre7\lib\security\cacerts

(如果您使用的是 64 位 JVM,请将“Program Files”替换为“Program Files (x86)”。)

我假设在 Linux 中它也是 $JRE_HOME/lib/security/cacerts ,您的 $JRE_HOME 值将取决于您如何安装它。

注意我确实尝试将证书导入到用户特定的密钥库中,但我无法让它工作。将其导入全局密钥库有点暴力,但对于我的用例来说已经足够了。最初的 Java 小程序警告和 LiveConnect 警告都消失了。另请注意,这是完全如上所示使用小程序清单;正如其他受访者所说,清单没有任何问题,我只需要让 JVM 信任证书。

于 2013-11-26T16:12:39.237 回答
0

更新:Applet 由浏览器信任的 CA 正式签名,而不是自签名,这是我的错误,对不起。原答案:

我在我的自签名小程序中使用这些属性,并且只有基本的点击运行问题,可以标记为“不再询问”:

点击运行警告

我没有收到每次都显示的实时连接警告:

实时连接警告

第一个是强制性的。您到底指的是哪个安全警告?

*图片被其他问题重复使用,与我无关...

于 2013-11-11T10:33:43.930 回答