Как проверить цепочку в RemoteCertificateValidationCallback?

У меня есть следующий код, который пытается проверить сертификат сервера в ЦС в моей частной PKI. Используется с ServicePointManager и RemoteCertificateValidationCallback:

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. (Это ожидаемо, потому что на тестовой установке нет отзыва).

Вопрос. Что означает нулевая длина ChainStatus.Length?

Вопрос: если все получилось, то почему не используется X509ChainStatusFlags.NoError?


person jww    schedule 19.03.2014    source источник


Ответы (1)


Если ChainStatuts.Lenght = 0; значит ваша цепочка построена правильно. Вы также можете проверить результат с помощью функции Verify(). Он использует режим онлайн-отзыва и использует стандартную проверку политики.

person hally mama    schedule 10.01.2018
comment
Добро пожаловать в StackOverflow: если вы публикуете образцы кода, XML или данных, выделите эти строки в текстовом редакторе и нажмите кнопку образцов кода ( { } ) на панели инструментов редактора или используйте Ctrl+K на клавиатуре, чтобы красиво отформатировать и синтаксис подчеркни это! - person WhatsThePoint; 10.01.2018