【问题标题】:java webstart code signing requirements overviewjava webstart 代码签名要求概述
【发布时间】:2013-10-29 01:18:06
【问题描述】:

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

目前的做法是我已经把这个添加到jnlp文件中了:

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

然后使用 keytool 在密钥库中创建一个密钥:

keytool -genkey -keystore yourKeystore -alias keyname

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

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

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

未来将阻止 UNKNOWN 发布者运行的应用程序 发布

而且我担心未来版本发布后会发生什么。

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

我的问题:

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

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    我的适用于 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 部署,您可以跳过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 2015-07-09
      • 1970-01-01
      • 2014-03-24
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多