我有一个在办公室使用的小型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中的列表,或者它指的是操作系统无法识别证书颁发机构这一事实。
我的问题:
感谢您的帮助。
答案 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部署,您可以跳过它。