-->

如何验证链RemoteCertificateValidationCallback?(How to v

2019-10-19 14:39发布

我有以下的代码,试图验证对CA服务器证书在我的私人PKI。 它与使用ServicePointManagerRemoteCertificateValidationCallback

static bool VerifyServerCertificate(object sender, X509Certificate certificate,
    X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    X509Certificate2 ca = new X509Certificate2();
    ca.Import("ca-rsa-cert.der");

    X509Chain chain2 = new X509Chain();
    chain2.ChainPolicy.ExtraStore.Add(ca);

    // Check all properties
    chain2.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;

    // This setup does not have revocation information
    chain2.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;

    chain2.Build(new X509Certificate2(certificate));
    if (chain2.ChainStatus.Length == 0)
    {
        return true;
    }

    bool result = chain2.ChainStatus[0].Status == X509ChainStatusFlags.NoError;
    Debug.Assert(result == true);

    return result;
}

问题是, chain2.ChainStatus.Length始终为0。

如果我设置X509RevocationModeX509RevocationMode.Online ,然后ChainStatus.Length == 1 ,状态设置为X509ChainStatusFlags.RevocationStatusUnknown 。 (其预料之中,因为没有撤销在试验台)。

:什么是一个0长度ChainStatus.Length是什么意思?

:如果成功,那么为什么X509ChainStatusFlags.NoError不使用?

Answer 1:

如果ChainStatuts.Lenght = 0; 这意味着你的链条被正确建造。 您可以使用验证()函数检查结果,它使用在线撤销模式,并使用标准的策略验证。



文章来源: How to verify chain in RemoteCertificateValidationCallback?