最近我们的时间卡系统的升级迫使我们升级所有的工作站到Java 7u51(我们在6u45)。 我们有另一个基于Java的应用程序,这对我们的业务至关重要,现在正在抛出不断的安全警告。 每个用户必须每天至less点击一次“运行”(供应商的代码是无签名的,没有发布者信息)。 这是无法接受的
据我所知,解决此问题的唯一方法是使用部署规则集。 我已经search了大量的文章解释如何做到这一点。 他们都有点不一样,都没有工作。 我创build了XML文件,对其进行了Jar处理,并使用自签名证书对其进行了签名,然后将该证书导入到几台testing机器上的可信CA中。 无论我做什么,在每次访问的每个启用Java的站点(包括我特别列入白名单的站点)上都会看到以下错误:
“由部署规则集阻止的应用程序”
无法validation自签署的部署规则集jar。
我对于近几年甲骨文error handlingJava感到十分愤慨。 我已经抛出了200多个小时,因为我被一个又一个的路障所束缚。 用户沮丧地打电话给帮助台,不断的安全警告花费了组织时间和金钱。
无论如何,足够的咆哮。 如果任何人都可以告诉我我做了什么,做错了,将不胜感激。
以下是我采取的确切步骤:
1)下载并安装JDK 7u51(需要keytool.exe和jarsigner.exe)
2)创build了以下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命令创build一个50年的2048位RSA自签名证书,如下所示:(我让它提示inputDN信息;证书密码与密钥库密码相同)
keytool.exe -genkey -alias SelfSigned -keystore "SelfSigned.jks" -keyalg RSA -keysize 2048 -startdate "2000/01/01 00:00:00" -validity 18262
5)使用以下命令导出我刚刚创build的证书:
keytool.exe -export -file "SelfSigned.cer" -alias SelfSigned -keystore "SelfSigned.jks"
6)使用以下命令签署我在步骤3中创build的JAR文件:
jarsigner.exe -keystore "SelfSigned.jks" -signedjar "DeploymentRuleSet.jar" DeploymentRuleSet.jar SelfSigned
7)创buildC:\ Windows \ Sun \ Java \ Deployment文件夹并将DeploymentRuleSet.jar文件复制到其中。 我通过Java控制面板validation了规则集正在被应用,证书是有效的。
8)导入我在步骤5中导出的证书。这里是我偏离说明的地方。 我无法使用keytool.exe导入证书。 此页面build议用户trusted.certs存储没有密码,系统cacerts密码是“changeit”。 既没有工作,所以我使用Java控制面板的GUI将其导入用户的可信证书存储区。
如果在Windows上:我没有将证书导入Java控制面板小程序中的用户可信证书存储区。 我将它导入Windows证书.mmc计算机帐户,并将其存储在受信任的根证书颁发机构下。 我们正在使用政策来做到这一点。