问题
"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"
答案1
Crypto Shell 扩展仅显示文件中的第一个证书。链中的其他中级 CA 证书需要可供验证者(您正在检查此证书的计算机)从存储库访问,或安装在运行 Crypto Shell 扩展的计算机上的中级证书颁发机构存储中。
在 Microsoft CA 颁发的最终实体证书中,您应该会看到 Authority Information Access 扩展,其中应该包含可下载颁发者的 URL。如果可用,Crypto Shell 扩展可以从此 URL 下载中间 CA 证书,并避免您的困惑。
或者,为了测试的目的,您可以在运行 Crypto Shell 扩展的计算机的中级证书颁发机构存储中安装中级 CA 证书。
请注意,您不需要在所有计算机的所有中级证书颁发机构存储中安装中级 CA 证书(就像对根 CA 证书所做的那样),因为在实际使用中,最终实体应将中级 CA 证书作为协议的一部分提供给依赖方。例如,当 Web 服务器(例如 IIS)将 TLS 证书用于 HTTPS 时,服务器应将其证书与所有中级 CA 证书一起发送(根 CA 证书是可选的)。同样,由代码签名证书签名的软件包应包括除根 CA 证书之外的所有证书(后者再次是可选的)。
因此,您的证书没有任何问题 - Crypto Shell 扩展只是找不到中间 CA 证书。