使用 AD 证书服务对 Java 部署规则集 JAR 进行签名

使用 AD 证书服务对 Java 部署规则集 JAR 进行签名

我的任务是将 Java 7 Update 55 以及 Java 部署规则集部署到所有 Active Directory Windows 客户端。我已经设法获得了可靠的 Java 软件部署设置,但现在我正在努力部署部署规则集,以便正确配置 Java。我在签署 DeploymentRuleSet.jar 文件时遇到了麻烦。我有一个 Active Directory 证书服务服务器,负责向所有客户端分发证书,我想使用此 CA 颁发的证书。

每次我执行此链接我将已签名的 DeploymentRuleSet.jar 文件复制到客户端并尝试运行允许的 Java 小程序,但始终收到错误:“无法验证自签名的部署规则集 jar”。

以下是我执行操作的确切顺序思考应该这样做但没有:

  1. 我根据提供的模板创建了 ruleset.xml 文件这里
  2. 我下载并安装了 JDK v1.7.0.60。
  3. 我将 ruleset.xml 文件复制到 JDK 的 bin 文件夹中。
  4. 我通过发出以下命令创建了 DeploymentRuleSet.jar 文件:jar -cvf DeploymentRuleSet.jar ruleset.xml
  5. 我生成了一个新的密钥库和密钥:.\keytool.exe -genkey -alias mykey -keyalg RSA -keysize 2048 -keystore keystore.jks -storepass changeit
  6. 我生成了一个 CSR: keytool -certreq -alias mykey -file csr.csr -keystore keystore.jks -storepass changeit
  7. 我从密钥库中提取了私钥:keytool -v -importkeystore -srckeystore keystore.jks -srcalias mykey -destkeystore myp12file.p12 -deststoretype PKCS12
  8. 我将私钥重命名为Windows友好的扩展:rename myp12file.p12 myp12file.pfx
  9. 我确认我的CA有一个有效的CodeSigning模板。
  10. 我使用以下模板签署了 CSR:C:\Windows\system32\certreq.exe -submit -attrib "CertificateTemplate:GeneralCodeSigning" csr.csr mykey.cer myp12file.pfx
  11. 我通过 RDP 连接到 CA,并使用“根证书颁发机构”证书模板导出了计算机个人存储中的证书。我相信这是“根 CA”证书。我将其保存在 JDK 的 bin 文件夹中,文件名为 ca-cert.cer。
  12. 我将签名的密钥和根 CA 证书导入密钥库:.\keytool.exe -importcert -keystore keystore.jks -file ca-cert.cer -alias CARoot -storepass changeit
  13. 我签署了 JAR 文件:.\jarsigner.exe -keystore keystore.jks -storepass changeit DeploymentRuleSet.jar myKey
  14. 我使用 Powershell 将签名密钥附加到根 CA 证书:Get-Content .\mykey.cer | % { Add-Content -Value $_ -Path .\ca-cert.cer}
  15. 我将组合的证书导入到密钥库中:keytool -importcert -keystore C:\Users\user\AppData\LocalLow\Sun\Java\Deployment\security\cacerts -storepass changeit -alias mykey -file ca-cert.cer -noprompt
  16. 我将根 CA 导入密钥库:.\keytool.exe -importcert -keystore C:\users\user\AppData\LocalLow\Sun\Java\Deployment\security\cacerts -storepass changeit -alias myKey -file .\ca-cert.cer -noprompt
  17. 我将 DeploymentRuleSet.jar 文件复制到客户端的 C:\Windows\Sun\Java\Deployment 文件夹中。
  18. 我向客户端的 CA 请求了用户代码签名证书并安装了它。
  19. 我打开 Java 控制面板并转到“安全”选项卡。我确认我有“查看活动部署规则集”链接。
  20. 我单击了 Java 控制面板中的“管理证书”和“系统”选项卡。然后我将证书类型更改为签名者 CA,但我找不到我在此处创建的任何证书。它应该在这里的某个地方吗?

当我访问一个应该被允许的 URL 时,出现了自签名证书问题。正如你所看到的,我已经遇到过很多次了。如果能得到任何帮助,我将不胜感激。

答案1

您需要做几件事。

  • 首先,Java JVM 的信任库中有 PKI 中的根 CA 证书
    • 签名代码的执行位置和进行代码签名的位置,默认情况下为%JAVAHOME%/lib/security/cacerts
      • 在 Windows 上,这通常是%PROGRAMFILES%\ Java \ jre7 \ lib \ security \ cacerts
    • 此外,对于执行该代码的任何框,它都应位于系统信任库中
      • 视窗:mmc.exe --> 证书 --> 计算机帐户 --> 受信任的根证书颁发机构
      • 红帽企业版:/etc/pki/tls/certs/
  • 其次,确保您的代码签名证书已设置为对代码进行签名
    • 它应该具有扩展密钥使用“代码签名”(这可以用数字表示为 OID 1.3.6.1.5.5.7.3.3 存在并设置为 true)
    • 它应该具有密钥用途,包括数字签名
    • 它应该将基本约束“CA”设置为 false(这也可能列为“主题类型 = 最终实体”),并将“关键”设置为“true”
    • 它应该有一个 CDP(CRL 分发点)列出,并且应该指向 CRL 可用的有效 HTTP 或 LDAP URL(这可以让您明确地不信任在签名后发现不合适的代码)

相关内容