X509Store.Certificates.Find使用validOnly参数设置为true时无法返回中间CA证书。

6

我安装了一个证书在:

  • 证书(本地计算机)
    • 受信任的根证书颁发机构
      • 证书

这段代码将证书作为有效证书进行了验证。

X509Store certStore = new X509Store(StoreName.CertificateAuthority, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);

try {
    var oAuthRootCertificateList = certStore.Certificates.Find(findType, findValue, true);
    oauthRootCertificate = oAuthRootCertificateList[0];
} catch (Exception ex) {
    Trace.TraceError(ex.Message);
} finally {
    certStore.Close();
}

*(findType和findValue在代码中已经设置)

一切都很好,代码也很好。

现在我已经从“受信任的根证书颁发机构”中删除了证书,并安装在:

  • 证书(本地计算机)
    • 中间证书颁发机构
      • 证书

因为 Azure 不允许我将证书部署在 Trusted Root 分支上。

现在,代码出现了故障。我必须将最后一个参数(validOnly)从 true 更改为 false 才能运行它。

您可以在这里查看 Find 方法的帮助文档。

有什么想法,为什么它不能运行,以及如何解决?


为什么要将您的证书从受信任根证书移动到中间证书呢?这是自签名证书吗? - Rajesh
@Rajesh 从这个问题来看:“因为Azure不允许我将证书部署在受信任的根分支上。” - ferpega
请参考以下链接,可能会有所帮助:http://social.technet.microsoft.com/Forums/en-US/winservercore/thread/5a613754-0a7f-4157-bc47-97e8b55a2878/ 和 http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/96926ae6-0cbf-4d00-9dd4-bbe86f93737e - Rajesh
我已经知道了“手动安装”的替代方法,谢谢@Rajesh。但我想知道为什么代码认为证书无效,当它作为中间机构时。 - ferpega
中间存储中的证书仅用于证书链验证目的。如果您的证书是自签名证书,则其颁发者需要出现在受信任的根机构中,以使证书验证成功。仅将其放置在中间证书颁发机构中是不够的。 - Rajesh
显示剩余2条评论
1个回答

3
中间证书存储中的证书用于证书链验证目的。如果您的证书是自签名证书,则其颁发者需要在受信任的根机构中进行批准,以确保证书验证成功。
仅将其放置在中间证书颁发机构中是不够的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接