Java小程序:调用方允许的代码库不工作

Java小程序:调用方允许的代码库不工作,java,applet,security-warning,Java,Applet,Security Warning,我在一个内部自签名小程序上收到可怕的LiveConnect警告。我正在使用Java1.7.045。根据我读到的内容,我应该能够通过向清单中添加调用方允许的代码库*并删除Trusted Library属性来消除这些问题。构建小程序的ant目标如下所示: <jar destfile="MyApplet.jar"> <manifest> <attribute name="Main-Class" value="com.mycompany.MyApplet"/&g

我在一个内部自签名小程序上收到可怕的LiveConnect警告。我正在使用Java1.7.045。根据我读到的内容,我应该能够通过向清单中添加调用方允许的代码库*并删除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上的Firefox25.0,这是值得的。。。任何想法都将不胜感激

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

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

我没有收到每次都会显示的live connect警告:

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

*其他问题的图像被重复使用,与我无关…

更新:小程序由浏览器可信CA正式签名,而不是自签名,这是我的错误,抱歉。原始答复:

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

我没有收到每次都会显示的live connect警告:

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


*图像是重复使用的其他问题,与我无关…

我观察到了同样的行为。我的测试表明,只有当JAR由可信证书签名时,调用方允许的代码库清单属性才会生效。(我用不受信任的证书签署了一个JAR,出现了警告。我用受信任的证书签署了同一个JAR,但没有出现警告)


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

我观察到了同样的行为。我的测试表明,只有当JAR由可信证书签名时,调用方允许的代码库清单属性才会生效。(我用不受信任的证书签署了一个JAR,出现了警告。我用受信任的证书签署了同一个JAR,但没有出现警告)

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

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

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都有自己的Cacert。在Mac电脑上,正确的是

/Library/Internet插件/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts

在Windows中是这样的

C:\ProgramFiles(x86)\Java\jre7\lib\security\cacerts

(如果您使用的是64位JVM,请将“程序文件”替换为“程序文件(x86)”

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

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

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

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都有自己的Cacert。在Mac电脑上,正确的是

/Library/Internet插件/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts

在Windows中是这样的

C:\ProgramFiles(x86)\Java\jre7\lib\security\cacerts

(如果您使用的是64位JVM,请将“程序文件”替换为“程序文件(x86)”

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

注意,我也尝试过将证书导入到用户特定的密钥库中,但无法实现。将其导入全局密钥库有点粗暴,但对于我的用例来说已经足够了。最初的Java小程序警告和LiveConnect警告都消失了。还请注意,这正是如上所示使用小程序清单;正如其他受访者所建议的,清单没有问题,我只需要将JVM发送到trus