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

问题描述 投票:0回答:1

我目前正在开发在JRE 1.8.0.77下运行的旧版JavaFX应用程序。它在没有互联网的封闭网络中运行。该应用程序通过Webstart部署到数百台计算机上,由于计算机经常被重新映像,因此我们希望避免用户单击安全弹出窗口。

jnlp具有标签:

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

Oracle列出了实现此目的的两种主要方法,除了勾选了“不再显示我”复选框:

  1. 可以将证书手动导入到JRE可信证书存储中。
  2. [位于$ {user.home} /。java.policy的Java策略文件中的Grant AllPermissions,或指向$(JRE_HOME)/lib/security/java.security文件中具有AllPermissions的任何Java策略文件。] >
  3. Source

至此,我已经尝试了两种方法,但遇到了以下问题:

授予AllPermissions

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

grant {
     permission java.security.AllPermission;
};

到多个位置,包括:

  • $ USER_HOME / .java.policy
  • $ JAVA_HOME / jre / lib / security / java.policy
  • $ JAVA_HOME / jre / lib / security / javaws.policy(在运行webstart时使用-verbose会将其列为“ -Djava.security.policy”)]
  • 我什至制作了一个自定义的policy.file,将其发布到用户主目录下,并通过here中指定的“ deployment.system.security.policy”指向它。
  • 似乎这些策略确实有效,因为例如当我从.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应用程序。它在没有互联网的封闭网络中运行。此应用程序通过...

java security java-web-start policy
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.