我在内部自签名小程序上收到了可怕的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,它的价值......任何想法都将不胜感激!
答案 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正式签名,而非自签名,这是我的错误,抱歉。原始答案:
我在自签名小程序中使用这些属性,并且只有基本点击运行问题,可以标记为“不要再问”:
我没有收到每次显示的实时连接警告:
第一个是强制性的。你究竟指出哪种安全警告?
*图片重复使用其他问题,与我无关......