【问题标题】:Java applet: Caller-Allowable-Codebase does not workJava 小程序:Caller-Allowable-Codebase 不起作用
【发布时间】:2013-11-20 20:44:03
【问题描述】:

我在内部自签名小程序上收到可怕的 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,物有所值……任何想法都将不胜感激!

【问题讨论】:

    标签: java applet security-warning


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      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

      棘手的部分是确定要将其导入到哪个 instance cacerts;根据配置,您可能安装了一大堆 JVM,并且每个都有自己的 cacert。在 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 信任证书。

      【讨论】:

        【解决方案3】:

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

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

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

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

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

        【讨论】:

        • 当您的帖子要求澄清问题时,它应该是“评论”而不是“答案”。此外,OP 谈到“LiveConnect 警告”,只有您显示的第二个警告是特定于 LiveConnect 的。
        • @meriton:不,这是“对我有用”的“错误”答案,但我现在意识到这确实是一个受信任的 CA 签名小程序,而不是自签名。
        • 我尝试导出用于签署小程序的密钥(keytool -keystore mykeystore -exportcert -file my.cer -alias myalias),然后将其导入用户的受信任密钥库(keytool -keystoretrusted.certs -storepass '' -importcert my.cer)。我在 Windows 7 和 /Users/tokken/Library/Application Support/Oracle/Java/Deployment/security/trusted 下为 C:\Users\tokken\AppData\LocalLow\Sun\Java\Deployment\security\trusted.certs 执行此操作。 OS X 10.7 下的证书。我仍然收到警告,也许并不奇怪,因为事实证明证书已经存在!
        • 我认为证书已经在trusted.certs 中,因为当你仍然能够说“从现在开始信任这个小程序”时,就会发生这种情况——它会导入证书。所以现在它不仅不再提供导入证书,而且即使你强制它,它也会被忽略。
        猜你喜欢
        • 2013-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        • 2016-05-25
        • 2011-08-30
        • 1970-01-01
        相关资源
        最近更新 更多