目前,我正在开发一个运行在JRE1.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/部署/security中的密钥存储库中,而不是在$USER_HOME/.keystore或$JAVA_HOME/jre/lib/security中。
使用前面提到的"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的每个单独位置,我必须重复这个过程。
我希望有人知道一个不同的解决方案,或者在我的故事中发现了一个错误,因为我们似乎要指示用户点击这个框。谢谢您的提示!
发布于 2020-05-18 09:21:49
https://stackoverflow.com/questions/61823646
复制相似问题