Java (8) Webstart:避免安全弹窗

Java (8) Webstart: avoiding security popups

我目前正在开发 运行JRE 1.8.0.77 下的 JavaFX 应用程序。它处于封闭网络中 运行,没有互联网连接。这个应用程序通过 Webstart 部署到数百台机器上,我们希望避免让用户点击安全弹出窗口,因为机器经常被重新映像。

jnlp 有标签:

<security>
   <all-permissions/>
</security>

Oracle 列出了实现此目的的两种主要方法,除了勾选 "don't show me again" 框:

  1. 可以手动将证书导入 JRE 受信任的证书存储区。
  2. G运行t AllPermissions 在位于 ${user.home}/.java.policy 的 Java 策略文件中,或指向任何 Java 策略在 $(JRE_HOME)/lib/security/java.security 文件中具有 AllPermissions 的文件。

Source

此时我已经尝试了两种方法,但我面临以下问题:

G运行设置所有权限

这是我首选的完成方式,因为应用程序 运行 在封闭网络中,安全风险较小。但是我尝试添加以下文本:

grant {
     permission java.security.AllPermission;
};

多个地点,包括:

似乎这些策略确实有效,因为当我删除权限时,例如,.java.policy webstart 将拒绝 运行 作为一个整体。

但是每次我启动 webstart 时,给定 jnlp 所在的 url,它会显示安全弹出窗口。

导入证书

这似乎是一种正确的方法,但是我注意到的第一件事是,当您通过手动弹出窗口允许证书时,它被放置在 $USER_HOME/.[ 中的密钥库中。 =85=] 而不是 $USER_HOME/.keystore 或 $JAVA_HOME/jre/lib/security.

使用 "deployment.user.security.trusted.certs" here 我可以让 webstart 使用我提供的密钥库。 (额外说明,webstart创建自己的keystore时,密码是“”。这个信息,显然很难找到)

手动批准的证书然后获得以下别名,这似乎是强制性的,以便在随后的 运行s 中正确识别它:

deploymentusercert$tsflag$loc=http//webserver.com:80##jnlp:http//webserver.com:80##from:http//webserver.com:80java.util.random@530ea09d

其中 webserver.com 是 jnlp 位置的 URL。如果我没有在证书旁边提到这个别名,它似乎不会在随后的 运行 中被识别并显示另一个安全弹出窗口。手动导出和导入证书不会添加此别名,因此无法识别。

我可以使用这个确切的别名并将其分发到用户机器上,但是这些用户机器分布在几个位置,每个位置都有自己的 jnlp 文件。这意味着没有我可以使用的通用别名。

总结

似乎我可以避免出现此安全弹出窗口的唯一方法是手动批准证书,然后将 webstart 生成的确切密钥库分发给用户机器。然后我必须对从其他地方获取 jnlp 的每个单独位置重复此过程。

我希望有人知道不同的解决方案或发现我的故事中的错误,因为看起来我们将不得不指示用户单击该框。预先感谢您提供任何提示!

这篇博客描述了最好的解决方案: http://symplik.blogspot.com/2013/11/get-rid-of-java-applet-warning-when_3.html

要让 webstart 识别和使用证书,它必须至少在密钥库中具有以下别名:

deploymentusercert$tsflag

似乎没有必要使用随机数 URL。