我正在尝试自动化生成证书签名请求的过程,然后从 Windows Server 2012 R2 服务器上的 CA 导入响应以用作 IIS 中 SSL 绑定(bind)的证书。我能够生成 CSR,然后我将其提供给安全团队,然后安全团队为我提供响应然后导入,但我无法导入它。
此服务器在工作组中。我想我会提到这一点,所以没有 AD 注册政策。
这是我的过程:
- 在相关服务器上使用 certreq.exe 生成 CSR。生成的 INF 文件看起来像这样:
[Version] Signature = "$Windows NT$" [NewRequest] Subject = "C=US,S=California,L=City,O=Company,OU=IT,CN=hostname" Exportable = TRUE KeyLength = 2048 KeySpec = 1 KeyUsage = 0xa0 MachineKeySet = True ProviderName = "Microsoft RSA SChannel Cryptographic Provider" ProviderType = 12 Silent = True SMIME = False RequestType = PKCS10
然后通过执行此操作将此 INF 文件转换为 CSR .req 文件:
certreq.exe -new "C:\inffile.inf" "C:\certreq.req"
REQ 文件被发送到安全团队,他们还给我一个 .CER 文件,当手动导入时,实际上添加了来自 Digicert 的三个证书。我期望的证书以及看起来像是一些中间 CA 的证书。
这是通过 MMC 证书管理单元导入时的样子。
如果我像这样通过 MMC 导入证书,它不会显示在服务器证书下的 IIS 管理器中,所以我看得更深入一些。我尝试像这样通过 IIS 管理器完成证书签名请求,并且证书出现了,我很高兴。
但是,我无法使用 GUI,因为我正在使用脚本。
我确认请求在带有私钥的证书注册请求中。
我确认 CSR 的公钥和我返回的 p7b 是相同的。
certutil -dump issuedcert.cer
certutil -dump certreq.req
问题:我从证书注册请求中导出了 CSR,并查看了公钥。它与 issuedcert.cer 中的不一样。看起来这就是问题所在,但为什么呢?
然后我尝试使用 certreq.exe 来接受响应,但它不起作用。
certreq.exe -accept -machine "C:\issuedcert.cer"
快完成了,但是没有。我不断收到此错误消息:
最佳答案
此错误表明 certreq 无法在证书存储的证书注册请求节点中找到相关请求对象。
此外,我建议检查证书请求中的公钥是否与颁发的证书中的公钥匹配。您可以使用 certutil -dump file.req
命令转储请求文件(会有公钥)和 cerutil -dump cert.cer
转储颁发的证书并比较公钥.对证书存储中的证书注册请求节点中的每个对象执行相同的操作(专注于本地计算机上下文)以查找具有匹配公钥的请求对象。
关于iis - 导入证书时出现 CRYPT_E_NOT_FOUND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33129110/