通过 AD Enterprise CA 设置 Java 部署规则

通过 AD Enterprise CA 设置 Java 部署规则

我的目标是在我的组织中建立 Java 部署规则集,但当我们有一个通过 Active Directory 运行的 CA 时,我不想向第三方证书颁发机构支付代码签名证书的费用。我遵循了我认为正确的程序来完成此操作,但是当我最终运行任何 Java 小程序时,我收到以下错误:

无法验证自签名部署规则集 jar

我遵循的步骤如下:

  1. 导出我们的根 CA 证书
  2. 将根证书导入 JRE 安装路径中的 cacerts
  3. 将根证书导入个人密钥库
  4. 使用 keytool 为带有个人密钥库的新证书生成 CSR
  5. 使用 certreq 向企业 CA 提交 CSR,使用“代码签名”模板
  6. 将该证书导入个人密钥库
  7. 创建了一个非常基本的部署规则集并将其编译成jar
  8. 使用第 6 步中的个人密钥库中的证书对 jar 进行签名
  9. 将签名的 jar 复制到 \Windows\Sun\Java\Deployment\

上述步骤均顺利完成,没有出现任何错误 - 没有出现任何有关无效证书链或类似情况的信息。我可以在 Java 控制面板中看到根 CA 证书,当我单击控制面板中的部署规则集链接并查看其证书时,我会看到第 6 步中的证书及其父 CA,据我所知,这两个证书都有未来的到期日期和正确的信息。但在运行任何小程序时,我仍然会收到验证错误

那么 - 这根本就不可能,我们必须花钱购买证书吗?还是我(希望)做错了什么?如果有人有任何见解,我将不胜感激,谢谢!

答案1

找到修复。

我们遇到了完全相同的问题。我尝试了上面提到的所有方法,但都不起作用。Chrome 似乎无法正确提取 Windows 证书管理器,或者至少无法验证来自我们企业 CA 的签名。我尝试将我们的根 CA 证书以及我们的从属 CA 证书添加到所有系统密钥库,但没有成功。

问题是 Chrome 只查看用户密钥库,出于某些奇怪的原因不查看系统密钥库。在我将 RootCA 证书添加到 USER SIGNER CA 后,它就起作用了。

不起作用:%JAVA_HOME%\lib\security\cacerts

作品:%USERPROFILE%\AppData\LocalLow\Sun\Java\Deployment\security\trusted.cacerts

Google 或 JAVA 应该修复这个问题。

现在是时候为我们的用户编写注入脚本了。

答案2

我的问题是,新的 Java 更新没有删除旧的 DeploymentRuleSet.jar,该 DeploymentRuleSet.jar 仅由一些以前的版本使用,在我的情况下位于:

C:\Windows\Sun\Java\Deployment\DeploymentRuleSet.jar

此文件夹中的文件与 Java 安装文件夹的位置无关,并且即使在 Oracle 从 Java 中删除了 Sun 名称(并因此在新版本的 Java 中更改了某些文件的位置)之后,上面给出的文件仍然保留在系统中,并且似乎新版本的 Java 仍在继续使用它。

Oracle 取消了 Java 小程序的中等安全设置后,与 Java 相关的一切都停止了工作,只是报告“无法验证规则集 jar”,并且互联网上没有提供任何有用的解决方案。

我通过扫描注册表中的 Java 字符串找到了此文件夹,从而清除了 mu 系统中与 Java 相关的所有内容并进行了全新安装,结果发现这就是问题所在。为什么最新版本的 Java 继续使用这个文件?

自从我从系统中删除了这个 jar 文件后(我的 3 台电脑上的 Windows 7 都存在同样的问题,包括 32 位和 64 位),Java 就可以正常工作了,但我在互联网上没有找到这个解决方案。

答案3

事实证明,这种情况只发生在 Chrome 和 Firefox 中,而不会发生在 IE 中。我还没有用 Opera 或 Safari 测试过。Chrome 的证书管理器会调出 Windows 的证书管理器,其中当然已经包含了我们企业 CA 的证书,而将该证书添加到 Firefox 的证书管理器中似乎没有任何效果。不过,部署规则集在 IE 中运行良好。

我只使用 Chrome,因为我更喜欢它的开发工具而不是 IE 的开发工具 - 我们的用户使用 IE,如果您使用 Windows 企业 CA 并使用混合使用 Java 和 ActiveX 的旧版系统,那么您的用户很可能也是如此。我将把这个标记为答案,因为切换到 IE 对我来说是可行的,但我希望将来可以为其他浏览器找到一些解决方案。

答案4

我为同样的问题苦苦挣扎,最后找到了解决方案。解决方案是在 Java 控制台的证书存储中将我的证书导入证书类型“签名者 CA”。然后,我也可以在 Firefox 和 Chrome 中运行我的自签名小程序。

相关内容