Прочитать на английском

Поделиться через


X509Chain Класс

Определение

Представляет обработчик для создания цепочки для сертификатов X509Certificate2.

public class X509Chain : IDisposable
public class X509Chain
Наследование
X509Chain
Реализации

Примеры

Следующий пример кода открывает личное хранилище сертификатов текущего пользователя, позволяет выбрать сертификат, а затем записывает сведения о сертификате и цепочке сертификатов в консоль. Выходные данные зависят от выбранного сертификата.

using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.IO;

class TestX509Chain
{
    static void Main(string[] args)
    {
        //Create new X509 store from local certificate store.
        X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
        store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);

        //Output store information.
        Console.WriteLine ("Store Information");
        Console.WriteLine ("Number of certificates in the store: {0}", store.Certificates.Count);
        Console.WriteLine ("Store location: {0}", store.Location);
        Console.WriteLine ("Store name: {0} {1}", store.Name, Environment.NewLine);
    
        //Put certificates from the store into a collection so user can select one.
        X509Certificate2Collection fcollection = (X509Certificate2Collection)store.Certificates;
        X509Certificate2Collection collection = X509Certificate2UI.SelectFromCollection(fcollection, "Select an X509 Certificate", "Choose a certificate to examine.", X509SelectionFlag.SingleSelection);
        X509Certificate2 certificate = collection[0];
        X509Certificate2UI.DisplayCertificate(certificate);

        //Output chain information of the selected certificate.
        X509Chain ch = new X509Chain();
        ch.ChainPolicy.RevocationMode = X509RevocationMode.Online;
        ch.Build (certificate);
        Console.WriteLine ("Chain Information");
        Console.WriteLine ("Chain revocation flag: {0}", ch.ChainPolicy.RevocationFlag);
        Console.WriteLine ("Chain revocation mode: {0}", ch.ChainPolicy.RevocationMode);
        Console.WriteLine ("Chain verification flag: {0}", ch.ChainPolicy.VerificationFlags);
        Console.WriteLine ("Chain verification time: {0}", ch.ChainPolicy.VerificationTime);
        Console.WriteLine ("Chain status length: {0}", ch.ChainStatus.Length);
        Console.WriteLine ("Chain application policy count: {0}", ch.ChainPolicy.ApplicationPolicy.Count);
        Console.WriteLine ("Chain certificate policy count: {0} {1}", ch.ChainPolicy.CertificatePolicy.Count, Environment.NewLine);

        //Output chain element information.
        Console.WriteLine ("Chain Element Information");
        Console.WriteLine ("Number of chain elements: {0}", ch.ChainElements.Count);
        Console.WriteLine ("Chain elements synchronized? {0} {1}", ch.ChainElements.IsSynchronized, Environment.NewLine);
    
        foreach (X509ChainElement element in ch.ChainElements)
        {
            Console.WriteLine ("Element issuer name: {0}", element.Certificate.Issuer);
            Console.WriteLine ("Element certificate valid until: {0}", element.Certificate.NotAfter);
            Console.WriteLine ("Element certificate is valid: {0}", element.Certificate.Verify ());
            Console.WriteLine ("Element error status length: {0}", element.ChainElementStatus.Length);
            Console.WriteLine ("Element information: {0}", element.Information);
            Console.WriteLine ("Number of element extensions: {0}{1}", element.Certificate.Extensions.Count, Environment.NewLine);

            if (ch.ChainStatus.Length > 1)
            {
                for (int index = 0; index < element.ChainElementStatus.Length; index++)
                {
                    Console.WriteLine (element.ChainElementStatus[index].Status);
                    Console.WriteLine (element.ChainElementStatus[index].StatusInformation);
                }
            }
        }
        store.Close();
    }
}

Комментарии

Объект X509Chain имеет глобальное состояние ошибки с именем ChainStatus , которое следует использовать для проверки сертификата. Правила, регулирующие проверку сертификатов, являются сложными, и логику проверки легко упростить, игнорируя состояние ошибки одного или нескольких участвующих элементов. Состояние глобальной ошибки учитывает состояние каждого элемента в цепочке.

Важно!

Начиная с платформа .NET Framework 4.6, этот тип реализует IDisposable интерфейс . По окончании использования выдаленную ему память следует прямо или косвенно освободить. Чтобы сделать это прямо, вызовите его метод Dispose в блоке try/catch. Чтобы сделать это косвенно, используйте языковые конструкции, такие как using (в C#) или Using (в Visual Basic). Дополнительные сведения см. в разделе "Использование объекта, реализующего IDisposable" в статье об интерфейсе IDisposable.

Для приложений, предназначенных для платформа .NET Framework 4.5.2 и более ранних версий, X509Chain класс не реализует IDisposable интерфейс и, следовательно, не имеет Dispose метода .

Конструкторы

X509Chain()

Инициализирует новый экземпляр класса X509Chain.

X509Chain(Boolean)

Инициализирует новый экземпляр класса X509Chain, который задает значение, определяющее, должен ли использоваться контекст компьютера.

X509Chain(IntPtr)

Инициализирует в цепочке X.509 новый экземпляр класса X509Chain с помощью дескриптора IntPtr.

Свойства

ChainContext

Возвращает дескриптор цепочки X.509.

ChainElements

Возвращает коллекцию объектов X509ChainElement.

ChainPolicy

Возвращает или задает объект X509ChainPolicy, используемый для создания цепочки сертификатов X.509.

ChainStatus

Возвращает состояние каждого элемента в объекте X509Chain.

SafeHandle

Получает безопасный дескриптор для этого экземпляра X509Chain.

Методы

Build(X509Certificate2)

Создает цепочку X.509 с использованием политики, указанной в объекте X509ChainPolicy.

Create()

Создает объект X509Chain после запроса сопоставления, заданного в файле CryptoConfig, и сопоставляет цепочку с имеющимся сопоставлением.

Dispose()

Освобождает все ресурсы, используемые этим классом X509Chain.

Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом X509Chain, а при необходимости освобождает также управляемые ресурсы.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
Reset()

Очищает текущий объект X509Chain.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к