我有以下代码,试图在我的专用PKI中针对CA验证服务器证书。它与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。

如果将X509RevocationMode设置为X509RevocationMode.Online,则将ChainStatus.Length == 1设置为X509ChainStatusFlags.RevocationStatusUnknown。 (这是预期的,因为测试装备中没有吊销)。

问题:0长度ChainStatus.Length是什么意思?

问题:如果成功,为什么不使用X509ChainStatusFlags.NoError

最佳答案

如果ChainStatuts.Lenght = 0;表示您的链已正确构建。
您也可以使用Verify()功能检查结果。它使用在线吊销模式并使用标准策略验证。

09-11 18:41