Java applet:Caller-Allowable-Codebase不起作用

时间:2013-11-08 18:18:43

标签: java applet security-warning

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

<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,并且浏览器没有使用applet的旧缓存副本。客户端是在OS X 10.7.5上运行的Firefox 25.0,它的价值......任何想法都将不胜感激!

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

找到它 - 诀窍是将证书导入 right 密钥库。我从用于构建applet的钥匙串中导出证书:

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

(substiture&#34; Program Files&#34; for&#34; Program Files(x86)&#34;以防您使用64位JVM。)

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

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

答案 2 :(得分:0)

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

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

click to run warning

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

live connect warning

第一个是强制性的。你究竟指出哪种安全警告?

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