来自 certsrv 的 Microsoft Active Directory 证书服务响应

来自 certsrv 的 Microsoft Active Directory 证书服务响应

我正在尝试在嵌入式系统上使用由 Microsoft Active Directory 证书服务生成的证书和私钥。NDES 和 SCEP 目前超出范围,因此需要半手动操作。

我正在 AD CA 服务器上使用 Microsoft Web 工具https://服务器/certsrv。我能够在没有 CSR 的情况下完成并生成响应,并使用证书导出私钥。响应是一个页面,要求我“安装此证书”或“保存响应”。

如果我运行“安装此证书”选项,Windows Certmgr 应用程序会显示我已导入证书并且我拥有私钥。然后可以将其导出为 PKCS#12 文件,可以使用或转换为 PEM。但是,如果我使用“保存响应”选项并将文件存储为 p7b(如 certutil 在检查响应文件时所指示的),然后使用 p7b 文件导入证书,则没有可用的私钥。这是一致的,因为我不希望 PKCS#7 文件存储私钥。

我的问题:

PKCS#7 文件格式似乎不支持私钥,OpenSSL 似乎不支持从 PKCS#7 文件中提取私钥。有没有办法使用 certsrv web 工具并获取证书和私钥,而无需在 Windows 中“安装此证书”?另外,到底是怎么回事,让 MS 安装我似乎无法获得的私钥?我查看了文件中的脚本https://dakota.main.lab/certsrv/certfnsh.asp并且他们似乎使用与“保存响应”输出中显示的相同的 pkcs#7 数据。

提前致谢。

丁斯代尔

答案1

当您使用 Web 注册生成证书请求时,私钥将使用您的浏览器在本地生成。证书签名请求将发送到 CA(不包含私钥),此时将对其进行签名。然后,证书将在网页上显示给您,并带有“安装此证书”的链接。

在那个时间点,您不可能将其保存为 PKCS#12(忽略您不能右键单击并选择“另存为”的事实),因为它只是服务器上的证书。

当您“安装此证书”时,它会保存到您的证书存储中,此时它会与私钥结合。如果您打开证书 MMC,您会在那里看到此证书,它会显示您还拥有私钥。只有此时,您才能将两者导出为 PKCS#12 文件。

或者,您可以使用证书 MMC 来请求证书,然后使用其私钥将其导出为 PKCS#12,但即使这样,证书也需要先安装在您的计算机上(以便将其与其私钥匹配),然后您才能导出它。

您可以在命令行上执行类似的过程,但同样,您需要先安装证书,然后才能导出为 PKCS#12。

因此,我想您的问题的答案是“不,您不能。私钥始终是本地的,并且必须与 CA 返回的证书相结合,然后才能将其导出为 PKCS#12。”

相关内容