【发布时间】:2023-07-19 18:23:01
【问题描述】:
我正在使用有效的 Microsoft Active Directory 证书服务 (MS ADCS) PKI 的环境中工作。在那个环境中,我正在部署 this Java app,它使用 java 密钥库来管理其 https 服务器的密钥和证书。 de facto 管理工具似乎是keytool.exe。 keytool 的文档可以在 here 找到。
生成密钥对、创建证书请求和导入证书的一般推荐方法如下所示:
生成密钥对
keytool -genkey -keyalg RSA -keysize 2048 -alias securekey -keystore keystore生成证书请求
keytool -certreq -alias securekey -keystore keystore -file NewCertRequest.csr导入根证书
keytool -importcert -alias root -keystore keystore -file rootcert.csr导入中间证书
keytool -importcert -alias intermediateX -keystore keystore -file intcert.csr按顺序对每个中间证书重复此操作导入新签署的证书
keytool -importcert -alias securekey -keystore keystore -file NewlySignedCert.csr
keytool和建立证书链
第 3 步建立trust anchor。 keytool '打印' 证书供您审核,并要求您回答“是”以明确信任该证书。
第 4 步导入信任链中从根链接到新签名证书的中间证书。当您导入每个连续的从属中间证书时,keytool 会自动信任它们(或者至少应该信任它们)。 keytool 表明它具有到信任锚的完整证书路径(即步骤 3 中的根证书)的方式是微妙且薄弱的:
如果没有找到证书并且没有指定-noprompt选项,则打印出链中最后一个证书的信息,并提示用户进行验证。
对此的不成文推论如下:“如果 keytool 可以验证到信任锚的完整证书路径,它将打印出任何证书。”
您可以通过分别使用步骤 3 和 4 的 GeoTrust Global CA 和 Google Internet Authority G2 证书来确认这一点。 (当您转到 https://www.google.com 时,在绿色锁后面找到这些证书。)keytool 将打印出根 GeoTrust Global CA 并要求您明确信任它。信任 GeoTrust Global CA 后,keytool 将导入 Google Internet Authority G2 而不打印任何证书,从而表明 keytool 信任 Google Internet Authority G2。
keytool 无法链接我的 Microsoft ADCS 证书
当我尝试使用我的 MS ADCS 证书(a la 上面描述的 google 链)构建信任链时,keytool 无法建立信任链。我不确定确切的区别是什么,但是当keytool 在步骤 4 中打印出证书表明它没有建立到步骤 3 中已经受信任的根证书的信任链时,失败就出卖了.
怎么办?
鉴于keytool 似乎无法链接 MS ADCS 证书,对于我们环境中使用 java 密钥库管理密钥和证书的应用程序,我应该怎么做?
【问题讨论】:
-
您是否考虑过使用其他证书类型? tomcat 应用程序可以接受其他密钥库类型,而不仅仅是
JKS。PKCS12可能更适合您的需求(只需使用您可能已经拥有的.pfx文件)。如果您确实使用 tomcat,只需在server.xml文件中定义KeystoreType。 -
这是一个有趣的建议。我不记得我走了多远。我将检查应用程序是否可以指定 KeystoreType。有问题的应用程序是APC 关闭网络服务器的专有应用程序。
标签: java active-directory certificate keytool