我们最近升级了时间卡系统,这迫使我们将所有工作站升级到 Java 7u51(我们使用的是 6u45)。我们还有另一个对我们的业务至关重要的基于 Java 的应用程序,现在它不断发出安全警告。每个用户每天必须至少单击“运行”十几次(供应商的代码未签名,没有发布者信息)。这是不可接受的
据我所知,解决此问题的唯一方法是使用部署规则集。我在 Google 上搜索了大量解释如何执行此操作的文章。它们都有些不同,而且都不起作用。我创建了 XML 文件,将其打包成 Jar,使用自签名证书对其进行签名,然后将该证书导入几台测试机器上的受信任 CA。无论我做什么,我访问的每个启用 Java 的站点(包括我专门列入白名单的站点)都会看到以下错误:
“应用程序被部署规则集阻止”
无法验证自签名的部署规则集 jar。
我对 Oracle 近年来对 Java 的错误处理感到非常愤怒。我已经为这次推广投入了 200 多个小时,因为我被一个又一个的障碍所困扰。用户们沮丧地打电话给服务台,而不断的安全警告浪费了组织的时间和金钱。
不管怎样,别再抱怨了。如果有人能告诉我我做错了什么,我将不胜感激。
以下是我采取的具体步骤:
1)下载并安装 JDK 7u51(keytool.exe 和 jarsigner.exe 所需)
2)创建以下ruleset.xml文件:
<ruleset version="1.0+">
<rule>
<id location="*.ourdomain.com" />
<action permission="run" />
</rule>
<rule>
<id />
<action permission="default" />
</rule>
</ruleset>
3)使用以下命令打包XML文件:
jar.exe -cvf DeploymentRuleSet.jar ruleset.xml
4)使用 keytool.exe 命令创建一个 50 年、2048 位 RSA 自签名证书,如下所示:(我让它提示输入 DN 信息;证书密码与密钥库密码相同)
keytool.exe -genkey -alias SelfSigned -keystore "SelfSigned.jks" -keyalg RSA -keysize 2048 -startdate "2000/01/01 00:00:00" -validity 18262
5)使用以下命令导出我刚刚创建的证书:
keytool.exe -export -file "SelfSigned.cer" -alias SelfSigned -keystore "SelfSigned.jks"
6)使用以下命令对我在步骤3中创建的JAR文件进行签名:
jarsigner.exe -keystore "SelfSigned.jks" -signedjar "DeploymentRuleSet.jar" DeploymentRuleSet.jar SelfSigned
7) 创建 C:\Windows\Sun\Java\Deployment 文件夹并将 DeploymentRuleSet.jar 文件复制到其中。我通过 Java 控制面板验证了规则集正在应用并且证书有效。
8) 导入我在步骤 5 中导出的证书。这是我偏离说明的地方。我无法使用 keytool.exe 导入证书。这一页提示用户 trust.certs 存储没有密码,系统 cacerts 密码为“changeit”。两者都不起作用,因此我使用 Java 控制面板的 GUI 将其导入到用户的受信任证书存储中。
答案1
如果在 Windows 上:我没有将证书导入 Java 控制面板小程序中的用户受信任证书存储。我将其导入 Windows certificates.mmc 计算机帐户并将其存储在受信任的根证书颁发机构下。我们正在使用策略来执行此操作。