Описание метода X509Chain.Build ()

Я хочу проверить цепочку сертификатов, я получаю коллекцию X509Certificate2 и должен проверить, все ли сертификаты составляют одну цепочку.

Обычно, чтобы проверить цепочку сертификатов, я должен взять цифровую подпись из листового сертификата и проверить, подписан ли он корневым сертификатом - , но в .NET я не могу найти способ для извлечения подписи из объекта X509Certificate2 .

Поэтому я подумал об использовании метода X509Chain.Build () следующим образом:

   void ValidateChain(X509Certificate2Collection collection, X509Certificate2 leaf)
    {
        X509Chain x509Chain = new X509Chain();
        x509Chain.ChainPolicy.ExtraStore.AddRange(collection);
        bool isValid = x509Chain.Build(leaf); 
    }

Но у меня есть несколько вопросов о методе сборки:

  1. Как я понял, цепочка была построена также из моего компьютерного магазина, и я хочу, чтобы он был собран только из ExtraStore , как я могу определить это поведение?
  2. Я видел, что после того, как цепочка была построена, она не содержит корневого сертификата ; у меня вопрос , почему , и как я могу проверить, что в цепочке есть корневой CA, поскольку он не является частью элементов цепочки.

Я буду очень признателен, если кто-нибудь объяснит мне, как работает метод Build () .

5
задан Luke Girvin 5 April 2017 в 11:25
поделиться