Выполните проверку отзыва сертификатов X509 без установки сертификата в хранилище сертификатов - PullRequest
0 голосов
/ 06 декабря 2018

Я смотрю на сравнение сертификата пользователя с корневым сертификатом.Если я устанавливаю корневой сертификат в магазине Windows, все работает нормально.Однако для моего приложения установка сертификата в хранилище невозможна.

Когда я не устанавливаю сертификат, я получаю ожидаемый статус UntrustedRoot, но я также получаю RevocationOffline и RevocationStatusUnknown.

Из того, что я прочитал, проверка отзыва выполняется только в цепочке, которая заканчивается самозаверяющим сертификатом в доверенном корневом хранилище.Есть ли другой способ выполнить проверку отзыва после вызова chain.Build?Или я могу настроить что-либо до Build, чтобы он по-прежнему выполнял проверку с ненадежным рутом?Я стараюсь по возможности избегать использования сторонних библиотек.

У меня

X509Chain chain = new X509Chain
chain.ChainPolicy.RevocationMode = X509RevocationMode.Online
chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllowUnknownCertificateAuthority;

chain.ChainPolicy.ExtraStore.Add(root);
isValid = chain.Build(certificate);

// Check Byte Code
var chainRoot = chain.ChainElements[chain.ChainElements.Count - 1].Certificate;
isValid = isValid && chainRoot.RawData.SequenceEqual(root.RawData);

1 Ответ

0 голосов
/ 06 декабря 2018

Это невозможно с чистым .Net, вам нужно использовать взаимодействие CryptoAPI.По сути, вам нужно вызвать функцию CertCreateCertificateChainingEngine.Функция принимает параметр pConfig, который является указателем на структуру CERT_CHAIN_ENGINE_CONFIG, в которой вы настраиваете набор доверенных корней в поле hRestrictedRoots.Настройте другие поля, если это необходимо.После вызова функции CertCreateCertificateChainingEngine вы получите указатель на HCERTCHAINENGINE, который вы передаете функции CertGetCertificateChain в качестве параметра hChainEngine.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...