Java (8) 网络启动 : avoiding security popups

标签 java security java-web-start policy

我目前正在开发一个在 JRE 1.8.0.77 下运行的较旧的 JavaFX 应用程序。它在封闭网络内运行,没有互联网连接。该应用程序通过 Webstart 部署到数百台计算机,我们希望避免用户单击安全弹出窗口,因为计算机经常重新镜像。

jnlp 具有标签:

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

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

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

Source

目前我已经尝试了这两种方法,但面临以下问题:

授予所有权限

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

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 中的 keystore 中,而不是在 $USER_HOME/.keystore 或 $JAVA_HOME/jre/lib/security 中。

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

手动批准的证书随后会获得以下别名,这似乎是为了在后续运行中正确识别它所必需的:

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 生成的确切 keystore 分发到用户计算机。然后我必须对从其他地方获取 jnlp 的每个单独位置重复此过程。

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

最佳答案

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

为了让 Webstart 识别并使用证书, keystore 中必须至少具有以下别名:

deploymentusercert$tsflag

似乎不需要随机数和 URL。

关于Java (8) 网络启动 : avoiding security popups,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61823646/

相关文章:

php - Symfony 2.6 登录随机失败

java web start 文件权限

java - 将 8 位二进制的最高有效位更改为 0,并仅获取前 7 位的十进制值

java - 为什么连接终止时不抛出异常?

security - 我应该等待多长时间才能公开免费/开源项目中的漏洞?

java - JNLP - 如何部署运行的应用程序并创建用于启动 a.jar 的桌面图标?

java - 为什么 Java 7 为已签名的应用程序请求网络权限?

java - 无法根据 xsd 架构验证 xml 文档(找不到元素 'replyMessage' 的声明)

java - 连接到 zookeeper 的消费者不是消息消费的代理?

Java 在开发环境中抑制 java 未知发布者警告