ADCS 客户端证书缺少私钥

ADCS 客户端证书缺少私钥

我已将 ADCS 配置为通过 GPO 安装用户和计算机证书。使用这些证书,我可以从机器到 Clearpass RADIUS 服务器进行 EAP-TLS 身份验证。这是一件好事。

但是我尝试让用户从 http:///certsrv 下载非域计算机的用户证书。他们可以下载证书,但证书不会放在客户端计算机上的“个人”证书存储中,而是放在“Active Directory 用户对象”存储中。EAP-TLS 身份验证失败。经过进一步检查,似乎证书没有随其一起下载的私钥。通过 GPO 安装的证书确实有私钥。如果计算机上没有私钥,EAP-TLS 将始终失败。

如何让 ADCS 允许通过 Web 界面下载私钥?“用户”证书模板已选中允许此操作的复选框。我甚至创建了一个新的证书模板,并确保启用了允许下载私钥的选项。

有想法吗?

谢谢你!

答案1

但我想让用户从以下位置下载非域计算机的用户证书http:///certsrv

使用 ADCS Web Enrollment,对于未加入域的机器,您需要手动创建证书请求,可以使用 certreq.exe(包含在 Windows 中)或 OpenSSL。

使用以下方式创建证书请求时证书请求工具,私钥是在客户端计算机上创建的,并存储在客户端计算机上本地。 CA 永远不会拥有您的私钥。 (企业 CA 密钥存档不在此处讨论范围之内。) CA 只签署您的证书请求。 然后,当您将签名的证书请求带回您的客户端并导入时,它就会与私钥“结合”。

这些都是手动的。自动化是 Active Directory 域管理客户端和企业 PKI 的优势。但您指定了非域加入。

(PS,我想你可以编写一个脚本来自动执行所需的 certreq 和 certutil 命令,但我手边没有这个脚本。也许像

编辑:最后说明一下,您可能想尝试在 CA 上配置密钥存档,然后在证书请求中设置 RequestType = CMC 和 PrivateKeyArchive = True,老实说,我不知道这是否可以在未加入域的机器上工作,但理论上可以,因为您可以使用 CA 的证书安全地将您的私钥从客户端传输到 CA。(尽管您可能会争辩说,将私钥存储在多个位置原则上是不安全的。)

但我从未测试过它,也找不到它的记录。

(并不是说您需要密钥存档来实现我上面描述的基本 certreq 程序;我已经做过一百次了,我知道它是有效的。)

相关内容