X509Chain.ChainElements Eigenschaft

Definition

Ruft eine Auflistung von X509ChainElement Objekten ab.

public:
 property System::Security::Cryptography::X509Certificates::X509ChainElementCollection ^ ChainElements { System::Security::Cryptography::X509Certificates::X509ChainElementCollection ^ get(); };
public System.Security.Cryptography.X509Certificates.X509ChainElementCollection ChainElements { get; }
member this.ChainElements : System.Security.Cryptography.X509Certificates.X509ChainElementCollection
Public ReadOnly Property ChainElements As X509ChainElementCollection

Eigenschaftswert

Ein X509ChainElementCollection-Objekt.

Beispiele

Im folgenden Codebeispiel wird die Reihenfolge der Kettenelemente veranschaulicht:

using var chain = new X509Chain();
chain.Build(certificate);

// chain.ChainElements[0] is the leaf (end-entity) certificate
// chain.ChainElements[^1] is the root (trust anchor) certificate

Console.WriteLine("Certificate chain from leaf to root:");
for (int i = 0; i < chain.ChainElements.Count; i++)
{
    var cert = chain.ChainElements[i].Certificate;
    var role = i == 0 ? "Leaf" : 
               i == chain.ChainElements.Count - 1 ? "Root" : "Intermediate";
    Console.WriteLine($"[{i}] {role}: {cert.Subject}");
}

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

    //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();
'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)

Dim element As X509ChainElement
For Each 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 Then
        Dim index As Integer
        For index = 0 To element.ChainElementStatus.Length
            Console.WriteLine(element.ChainElementStatus(index).Status)
            Console.WriteLine(element.ChainElementStatus(index).StatusInformation)
        Next index
    End If
Next element
store.Close()

Hinweise

Jedes X509ChainElement Objekt ist eine Darstellung eines Elements in der Kette, das während eines Aufrufs der Build Methode erstellt wurde.

Ein Kettenelement besteht aus einem X509Certificate2 Objekt, einer X509ChainStatus Struktur und einer zusätzlichen Informationszeichenfolge.

Die ChainElements Sammlung wird vom Endentitätszertifikat (Blattzertifikat) bei Index 0 über alle Zwischenzertifikate bis zum Vertrauensanker (Stammzertifikat) am endgültigen Index sortiert. Diese Sortierung ist auf allen Plattformen konsistent.

Gilt für: