最近对考勤卡系统的升级迫使我们将所有工作站升级到 Java 7u51(我们使用的是 6u45)。我们有另一个基于 Java 的应用程序,它对我们的业务至关重要,现在不断发出安全警告。每个用户每天必须至少点击“运行”十次(供应商的代码未签名,没有发布者信息)。这是无法接受的
据我所知,解决此问题的唯一方法是使用部署规则集。我在谷歌上搜索了大量解释如何做到这一点的文章。它们都有点不同,它们都不起作用。我创建了 XML 文件,Jar'ed,使用自签名证书对其进行签名,然后将该证书导入到几台测试机器上的受信任 CA 中。无论我做什么,在我访问的每个启用 Java 的站点(包括我特别列入白名单的站点)上都会看到以下错误:
“应用程序被部署规则集阻止”
无法验证自签名部署规则集 jar。
我对甲骨文近年来对 Java 的错误处理感到非常愤怒。我已经在这次部署中投入了 200 多个小时,因为我被一个接一个的障碍所束缚。用户沮丧地打电话给服务台,不断的安全警告正在花费组织的时间和金钱。
无论如何,足够的咆哮。如果有人能告诉我我做错了什么,将不胜感激。
以下是我采取的具体步骤:
1) 下载并安装了 JDK 7u51(keytool.exe 和 jarsigner.exe 需要)
2) 创建以下规则集.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 导入证书。该页面提示用户trusted.certs store 没有密码,系统cacerts 密码为“changeit”。两者都不起作用,所以我使用 Java 控制面板的 GUI 将其导入到用户的受信任证书存储中。
如果在 Windows 上:我没有将证书导入到 Java 控制面板小程序中的用户受信任证书存储中。我将它导入到 Windows 证书.mmc 计算机帐户并将其存储在受信任的根证书颁发机构下。我们正在使用 to 政策来做到这一点。