Auf Englisch lesen

Freigeben über


X509Chain Klasse

Definition

Stellt eine Kettenerstellungs-Engine für X509Certificate2-Zertifikate dar.

C#
public class X509Chain : IDisposable
C#
public class X509Chain
Vererbung
X509Chain
Implementiert

Beispiele

Im folgenden Codebeispiel wird der persönliche Zertifikatspeicher des aktuellen Benutzers geöffnet, sie können ein Zertifikat auswählen und dann Zertifikat- und Zertifikatketteninformationen in die Konsole schreiben. Die Ausgabe hängt vom ausgewählten Zertifikat ab.

C#
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();
    }
}

Hinweise

Das X509Chain Objekt weist einen globalen Fehler status aufChainStatus, der für die Zertifikatüberprüfung verwendet werden soll. Die Regeln für die Zertifikatüberprüfung sind komplex, und es ist einfach, die Validierungslogik zu vereinfachen, indem der Fehler status eines oder mehrerer der beteiligten Elemente ignoriert wird. Der globale Fehler status berücksichtigt die status jedes Elements in der Kette.

Wichtig

Ab dem .NET Framework 4.6 implementiert dieser Typ die IDisposable Schnittstelle. Nach Abschluss der Verwendung sollten Sie den Typ entweder direkt oder indirekt löschen. Zum direkten Löschen des Typs rufen Sie seine Dispose-Methode in einem try/catch-Block auf. Zum indirekten Löschen verwenden Sie ein Sprachkonstrukt wie using (in C#) oder Using (in Visual Basic). Weitere Informationen finden Sie im Abschnitt „Verwenden eines Objekts, das IDisposable implementiert“ des Themas „Die IDisposable-Schnittstelle“.

Für Apps, die auf die .NET Framework 4.5.2 und frühere Versionen abzielen, implementiert die X509Chain -Klasse die IDisposable Schnittstelle nicht und verfügt Dispose daher über keine -Methode.

Konstruktoren

X509Chain()

Initialisiert eine neue Instanz der X509Chain-Klasse.

X509Chain(Boolean)

Initialisiert eine neue Instanz der X509Chain-Klasse. Diese gibt einen Wert an, der anzeigt, ob der Computerkontext verwendet werden soll.

X509Chain(IntPtr)

Initialisiert mithilfe eines X509Chain-Handles für eine X.509-Kette eine neue Instanz der IntPtr-Klasse.

Eigenschaften

ChainContext

Ruft ein Handle für eine X.509-Kette ab.

ChainElements

Ruft eine Auflistung von X509ChainElement-Objekten ab.

ChainPolicy

Ruft die beim Erstellen einer X.509-Zertifikatskette zu verwendende X509ChainPolicy ab oder legt diese fest.

ChainStatus

Ruft den Status aller Elemente in einem X509Chain-Objekt ab.

SafeHandle

Ruft ein sicheres Handle für diese X509Chain-Instanz ab.

Methoden

Build(X509Certificate2)

Erstellt mithilfe der in X509ChainPolicy angegebenen Richtlinie eine X.509-Kette.

Create()

Erstellt ein X509Chain-Objekt, nachdem die in der Datei CryptoConfig definierte Zuordnung abgefragt wurde, und ordnet die Kette dieser Zuordnung zu.

Dispose()

Gibt alle von dieser X509Chain-Klasse verwendeten Ressourcen frei.

Dispose(Boolean)

Gibt die von dieser X509Chain verwendeten nicht verwalteten Ressourcen und optional auch die verwalteten Ressourcen frei.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
Reset()

Löscht das aktuelle X509Chain-Objekt.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für:

Produkt Versionen
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1