java webstart代码签名要求概述

时间:2013-10-20 15:49:26

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

我有一个在办公室使用的小型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等Web浏览器识别,Java也可识别2级,用户和系统的证书。广泛接受的证书颁发机构(如Verisign)在Windows和Linux等操作系统中默认被识别。我知道webbrowsers也会识别一些证书颁发机构,但我认为他们认可的列表可能与操作系统识别的列表不同。我猜Java也认识到了一些,但我不知道是什么。我还知道,通过在〜/ .java / deployment / deployment.properties,deployment.system.security.trusted.certs中指定密钥库,我可以在Java中配置系统级别的密钥库。如果我不想支付证书,我可以自己创建(这就是我正在做的事情)所以我的证书来自UNKNOWN出版商。我希望通过deployment.system.security.trusted.certs指定我的密钥库然后它会为办公室解决这个问题,但显然它没有,我不明白,因为在这种情况下系统管理员说他认出这个证书。所以现在我正考虑在Windows中使用makecert制作证书,然后通过GPO将其推送到客户端PC。我的理解是,这将创建操作系统识别的证书,但我不知道makecert是否会使证书的处理方式与例如Windows,Firefox和Java中的verisign证书。而且我不知道UNKNOWN是否引用了java中的列表,或者它指的是操作系统无法识别证书颁发机构这一事实。

我的问题:

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

1 个答案:

答案 0 :(得分: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部署,您可以跳过它。