2

我有一个在办公室使用的小型 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 中浏览到应用程序。这很好用,除了现在我们得到这个对话框,上面写着:

在未来的版本中将阻止由未知发布者运行的应用程序

我担心当未来的版本发布时会发生什么。

我对所有这些代码签名的事情没有深入的了解。我知道它通过将一些二进制数据嵌入到文件中来工作,这些文件用于证明应用程序的发布者是证书颁发机构认可的公司/个人(这就是 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. 如果我们必须购买证书,是否有可供我们选择的证书颁发机构列表?显然我想买最便宜的,因为我发现这是管理开销。

谢谢您的帮助。

4

1 回答 1

0

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

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

然后我有一个代码发布者证书,由我的 CA 签名。我使用这个证书来签署我所有的代码(罐子)。

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

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

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

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

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

于 2013-11-09T16:03:25.873 回答