我有一个在办公室使用的小型 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 中的列表还是指证书颁发机构不被操作系统识别的事实。
我的问题:
- 如果有人能纠正我在上述描述中犯的错误,我将不胜感激。我相信我误解了一些东西,但我不知道是什么。
- 我简直不敢相信除非我们为证书付费,否则 Webstart 将无法运行。我想我们需要的是一种机制,系统管理员可以说他希望办公室 PC 能够识别给定的证书。有谁知道将来如何做到这一点?
- 如果我们必须购买证书,有人可以告诉我要注意什么或一般情况下是如何工作的吗?我可以以同样的方式使用 jarsigner 吗?
- 如果我们必须购买证书,是否有可供我们选择的证书颁发机构列表?显然我想买最便宜的,因为我发现这是管理开销。
谢谢您的帮助。