我目前正在开发在JRE 1.8.0.77下运行的旧版JavaFX应用程序。它在没有互联网的封闭网络中运行。该应用程序通过Webstart部署到数百台计算机上,由于计算机经常被重新映像,因此我们希望避免用户单击安全弹出窗口。
jnlp具有标签:
<security>
<all-permissions/>
</security>
Oracle列出了实现此目的的两种主要方法,除了勾选了“不再显示我”复选框:
至此,我已经尝试了两种方法,但遇到了以下问题:
授予AllPermissions
这是完成此操作的首选方式,因为应用程序在封闭的网络中运行,并且安全风险较小。但是我尝试添加以下文本:
grant {
permission java.security.AllPermission;
};
到多个位置,包括:
似乎这些策略确实有效,因为例如当我从.java.policy中删除权限时,webstart将拒绝整体运行。
但是每当我启动webstart时,给定jnlp所在的URL,它将显示安全弹出窗口。
导入证书
这似乎是一种正确的方法,但是我注意到的第一件事是,当您通过手动弹出窗口允许证书时,它将放置在$ USER_HOME / .java / deployment / security中的密钥库中,而不是在$ USER_HOME / .keystore或$ JAVA_HOME / jre / lib / security。
使用here中提到的“ deployment.user.security.trusted.certs”,我可以让Webstart使用我提供的密钥库。 (另外,当Webstart创建自己的密钥库时,密码为“”。此信息显然很难找到)
然后,手动批准的证书将获得以下别名,对于在以后的运行中正确识别它,这似乎是必需的:
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的每个位置重复此过程。
我希望有人知道其他解决方案或在我的故事中发现错误,因为看来我们将不得不指示用户单击该框。预先感谢您提供任何提示!
我目前正在开发在JRE 1.8.0.77下运行的旧版JavaFX应用程序。它在没有互联网的封闭网络中运行。此应用程序通过...