2013-10-20 101 views
2

我有一个在办公室中使用的小型javafx2应用程序。有些人从Firefox运行它,有些人将其作为桌面应用程序运行。 Webstart很棒。java webstart代码签名需求概述

目前的做法是,我已经加入这个JNLP文件:

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

然后使用keytool创建密钥库中的一个关键:

keytool -genkey -keystore yourKeystore -alias keyname 

我签署所有JAR文件将使用jarsigner在用户的PC上:

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

因此,用户要么使用第e桌面上的快捷方式文件(jnlp文件),或者在Firefox中浏览到应用程序。这个伟大的工程,但现在我们得到这个对话框,上面写着:

被身份不明的出版商正在运行的应用程序将被阻止在未来 释放

,我很担心会发生什么的时候,未来的版本出去了。

我对所有的代码签名都没有深刻的理解。我知道它的工作原理是将一些二进制数据嵌入到用来证明应用程序的发布者是证书颁发机构认可的公司/个人(这是jarsigner的AFAIK)的文件中。 Windows和Linux等操作系统,Firefox和Safari等浏览器都可以识别证书,Java也可以识别2级用户和系统的证书。在Windows和Linux等操作系统中,默认认可的认证机构(如威瑞信)已被广泛接受。我知道网页浏览器也能识别一些证书颁发机构,但我认为他们识别的列表可能与操作系统识别的列表不同。我猜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中的列表,或者它指的是证书颁发机构未被OS识别的事实。

我的问题:

  1. 如果有人能解决我在上面的描述中所犯的错误我将不胜感激。我相信我误解了一些东西,但我不知道是什么。
  2. 我只是不能相信Webstart不会工作,除非我们支付证书。我想我们需要的是一种系统管理员可以说他想让办公室PC识别给定证书的机制。有没有人有一个想法如何在未来做到这一点?
  3. 如果我们需要购买证书,是否有人可以让我知道要注意什么或者通常如何工作?我可以用同样的方式使用jarsigner吗?
  4. 如果我们需要购买证书,那里是否有证书颁发机构的列表,我们可以从中选择?很明显,我想去最便宜的,因为我觉得这是一个管理开销。

谢谢你的帮助。

回答

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部署,您可以跳过。