【问题标题】:How to verify a certificate chain using a CA certificate C#如何使用 CA 证书 C# 验证证书链
【发布时间】:2021-07-22 11:51:45
【问题描述】:

我正在尝试连接到 Mosquitto 代理。 代理将有一个 ca.crt 和一个 server.crt。我的应用只有 ca.crt。

连接后,代理提供 ca.crt 和 server.crt(证书链)。 如何根据我已经拥有的 ca.crt 验证两者? ca.crt 和客户端上的那个是一样的。

【问题讨论】:

    标签: c# cryptography certificate public-key-encryption


    【解决方案1】:

    使用X509Chain 类并将加载为X509Certificate2ca.crt 放到ExtraStore 属性的ChainPolicy 属性上。

    var caCert = new X509Certificate2(".\\ca.crt");
    var serverCert = new X509Certificate2(".\\server.crt");
    
    X509Chain ch = new X509Chain();
    ch.ChainPolicy.RevocationMode = X509RevocationMode.Online;
    ch.ChainPolicy.ExtraStore = new X509Certificate2Collection(caCert);
    ch.Build (serverCert);
    

    【讨论】:

    • 不幸的是它对我不起作用。构建返回 false。但是,如果我更改顺序(即,将 servercert 添加到 ExtraStore 并调用 ch.Build(caCert)),结果我会得到 true。我还从服务器(位于服务器上的 CA 证书和服务器证书)获取 X509Chain。当我调用 X509Chain.Build(我自己的站点的 CA Cert)时,我也得到了真实的结果。以上任何一种方法是否是可接受的验证方法?我明白了一般的想法,但我不明白为什么你的代码返回 false。
    • 您可以从 X509Chain 获得很多信息,这些信息会告诉您为什么它返回 false。
    • 经过一番阅读,我更改了以下参数: 1. X509RevocationMode.NoCheck;因为我无法在线检查证书或使用 CRL。证书将作为文件存储或安装在 Windows 证书存储中。 2. X509VerificationFlags.AllowUnknownCertificateAuthority;因为我的证书是自签名的。
    • 所以它可以工作 - 没有在线撤销检查 - 现在我假设。很高兴听到
    猜你喜欢
    • 2011-11-11
    • 2012-03-19
    • 2021-01-09
    • 2018-06-30
    • 2021-12-18
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多