java webstart 代码签名要求概述

标签 java javafx-2 java-web-start code-signing jar-signing

我有一个在办公室使用的小型 javafx2 应用程序。有些人从 Firefox 运行它,有些人将它作为桌面应用程序运行。 Webstart 很棒。

目前的做法是我在jnlp文件中添加了这个:

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

然后使用 key 工具在 keystore 中创建一个 key :

keytool -genkey -keystore yourKeystore -alias keyname

然后我使用 jarsigner 对用户 PC 上的所有 jar 文件进行签名:

jarsigner -keystore ./myapp.keystore -storepass xxx -keypass yyy <path to jar file> keyname

因此,用户要么使用桌面上的快捷方式文件(jnlp 文件)启动应用程序,要么在 Firefox 中浏览到该应用程序。这很好用,除了现在我们得到这个对话框说:

Running applications by UNKNOWN publishers will be blocked in a future release

我担心 future 版本发布时会发生什么。

我对所有这些代码签名的事情没有深入的了解。我知道它的工作原理是将一些二进制数据嵌入到文件中,这些文件用于证明应用程序的发布者是证书颁发机构认可的公司/个人(这就是 jarsigner 所做的 AFAIK)。证书被 Windows 和 Linux 等操作系统识别,被 Firefox 和 Safari 等网络浏览器识别,Java 也识别 2 个级别的证书,即用户和系统。有广泛接受的证书颁发机构(如 Verisign)在 Windows 和 Linux 等操作系统中被默认识别。我知道网络浏览器也能识别一些证书颁发机构,但我认为它们识别的列表可能与操作系统识别的列表不同。我猜 Java 也能识别一些但我不知道是什么。我还知道,我可以通过在 ~/.java/deployment/deployment.properties、deployment.system.security.trusted.certs 中指定 keystore ,在 Java 中配置系统级 keystore 。如果我不想为证书付费,我可以创建自己的证书(这就是我所做的)所以我的证书来自未知的发布者。我希望的是,如果我通过 deployment.system.security.trusted.certs 指定我的 keystore ,那么它将为办公室解决这个问题,但显然它没有,我不明白,因为在这种情况下系统管理员说他认得这张证书。所以现在我正在考虑在 Windows 中使用 makecert 制作证书,然后可以通过 GPO 将其推送到客户端 PC。我的理解是,这将创建操作系统可识别的证书,但我不知道 makecert 制作的证书是否会被以与例如相同的方式对待。 Windows、Firefox 和 Java 中的 verisign 证书。而且我不知道 UNKNOWN 是指 java 中的列表还是指证书颁发机构不被操作系统识别的事实。

我的问题:

  1. 如果有人能修正我在上述描述中所犯的错误,我将不胜感激。我相信我误解了什么,但我不知道是什么。
  2. 我简直不敢相信,除非我们支付证书费用,否则 Webstart 将无法工作。我想我们需要的是一种机制,系统管理员可以说他希望办公室 PC 识别给定的证书。有谁知道将来如何做到这一点?
  3. 如果我们必须购买证书,有人可以告诉我需要注意什么或一般如何运作吗?我可以用同样的方式使用 jarsigner 吗?
  4. 如果我们必须购买证书,是否有可供我们选择的证书颁发机构列表?显然我想买最便宜的,因为我发现这是一项管理开销。

感谢您的帮助。

最佳答案

我使用 JRE7u40 和 JRE8 的设置是这样的:

我的证书颁发机构 (CA) 有一个自签名证书。此证书必须受系统信任(例如,将其添加到 Java 控制面板/安全/证书/签名者 CA,但可能还有其他方法使您的 CA 受信任)。

然后我有一个由我的 CA 签名的代码发布者证书。我使用此证书签署我的所有代码( jar )。

此外,如果您想要代码的所有权限,我建议将这些 MANIFEST.MF 属性作为 QDH 最小值(如果我记得的话,从 JRE7u40 开始):

Permissions: all-permissions 
Codebase: * 
Trusted-Library: true 
Trusted-Only: true

第一次运行此类应用程序时,您仍会看到安全警告,因为运行时无法确保代码签名者证书未被其 CA 吊销。

但是,现在您可以选择永久接受此发布者(代码签名者证书),如果您这样做,代码签名者证书将添加到受信任的发布者(Java 控制面板/安全/证书/受信任的证书)并且您不会再看到这样的警告。

如果您想避免这一步,我想您必须正确设置您的 CA 基础设施以支持证书撤销验证。我假设在您的 CA 证书中包含一些额外的属性和特殊证书撤销服务的可用性。对于 Intranet 部署,您可以跳过它。

关于java webstart 代码签名要求概述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19479427/

相关文章:

java - 尝试将 JAR 文件添加到项目中,但出现 NoClassDefFoundError

java - 在 IDREF 属性中找到获取对象 ""的 JAXB,但此对象没有 ID

java - 存储库接口(interface)中的 MySQLSyntaxErrorException

java - 代码未在使用 JavaFx 实现 Controller 传递参数的 Netbeans 中进行编译

java - 如何在 javafx 2.4.0 中转换停止后触发事件?

java - 滑动 Android 时通知不会消失

从 Android 远程控制的 JavaFX 程序

java - Java Web Start 的问题

java - 如何防止同一应用程序的并行 Java Web Start 下载?

java - 有没有办法在不支持的浏览器上使用 Java Web Start?