问题
"The issuer of this certificate could not be found."
我已经通过 AD 证书服务创建了一个证书,但尽管 PFX 中存在完整的链,但它还是出现错误。
语境
我使用标准模板从我们组织的 AD 证书服务服务器创建了一个代码签名证书code signing
,并导出创建的证书(带有可导出的私钥)。
尽管我们的根证书在所有公司设备上都受到信任,但我们在使用此证书签署代码时遇到了问题。
经过调查,如果我将 PFX 转换为 PEM(文件扩展名为.CER
)并在文本编辑器中打开它,我可以看到 PEM 文件中列出的客户端、中间和根证书。但是,如果我双击此 CER 文件(即在 中打开它crypto shell extensions
),证书路径选项卡仅显示客户端证书并将证书状态显示为"The issuer of this certificate could not be found."
。
查看客户端的颁发者,它正确命名了中间证书。
如果我将中间证书和根证书从 PEM 文件复制到自己的证书中,将其另存为 .CER 并打开它,则中间证书和根证书会正确列出。客户端的与中间体的issuer
完全匹配;issued to
并且客户端的与中间体的issuer
完全匹配。subject name
要将 PFX 转换为 PEM,我正在使用openssl.exe pkcs12 -in "mycert.pfx" -out "mycert.cer" -nokeys -passin "pass:mypassword"
Crypto Shell 扩展仅显示文件中的第一个证书。链中的其他中间 CA 证书需要可供验证者(您检查此证书的计算机)从存储库或安装在运行 Crypto Shell 扩展的计算机上的中间证书颁发机构存储中访问。
在 Microsoft CA 颁发的最终实体证书中,您应该会看到颁发机构信息访问扩展,其中应包含颁发者可下载的 URL。如果可用,Crypto Shell 扩展可以从此 URL 下载中间 CA 证书,从而避免您的困惑。
或者,出于测试目的,您可以将中间 CA 证书安装在运行 Crypto Shell 扩展的计算机的中间证书颁发机构存储中。
请注意,您不需要在所有计算机的所有中间证书颁发机构存储中安装中间 CA 证书(就像您为根 CA 证书所做的那样),因为在实际使用中,中间 CA 证书应由最终提供 -作为协议的一部分向依赖方提供实体。例如,当 Web 服务器(例如 IIS)将 TLS 证书用于 HTTPS 时,服务器应将其证书与所有中间 CA 证书(根可选)一起发送。同样,由代码签名证书签名的包应包含除根 CA 证书之外的所有证书(后者又是可选的)。
因此,您的证书没有任何问题 - Crypto Shell 扩展根本找不到中间 CA 证书。