So lesen Sie das Zertifikat des Unterzeichners aus verifizierten PDF-Signaturen in C# (X.509, eIDAS, Chain)

This article was translated from English: Does it need improvement?
Translated
View the article in English

Ein Vertrag landet in Ihrer Audit-Pipeline. Er ist digital signiert, die Signatur ist gültig, und Ihr Compliance-Team benötigt Antworten: Wer hat ihn signiert, war dessen Zertifikat an diesem Morgen gültig, und stimmt die ausstellende Zertifizierungsstelle mit Ihrer Liste vertrauenswürdiger Zertifizierungsstellen überein? Sie könnten die rohen Signatur-Bytes extrahieren, das DER-Format analysieren und die Zertifikatskette manuell durchgehen. Oder Sie könnten das VerifiedSignature-Objekt nach seinem SignerCertificate fragen und die Antworten als Eigenschaften auslesen.

Genau dafür sind die Eigenschaften SignerCertificate und CertificateChain von VerifiedSignature vorgesehen. Zurückgegeben von PdfDocument.GetVerifiedSignatures(), geben sie die vollständige X.509-Identität des Unterzeichners, die ausstellende Zertifizierungsstelle, Gültigkeitsdaten, den SHA-256-Fingerabdruck, die rohen DER-Bytes und jedes Zwischenzertifikat bis zur Stammzertifizierungsstelle preis. Das ist die API-Oberfläche, die Sie für eIDAS-Konformität, Zertifikat-Pinning, Prüfpfade und die Überprüfung der Vertrauenskette benötigen.

Dieser Leitfaden führt durch drei Arten der Zertifikatsprüfung:

  • Standard-X.509-Details: Identitätsmerkmale, vollständige Distinguished Names, Gültigkeitszeiträume und rohe DER-Bytes für X509Certificate2-Interoperabilität.
  • eIDAS und regulierte Branchen: Abrufen der nationalen ID des Unterzeichners aus SubjectSerialNumber und Lesen numerischer OIDs wie 2.5.4.97 für den eIDAS-OrganizationIdentifier.
  • Validierung der Vertrauenskette: SHA-256-Thumbprint-Pinning und Durchlaufen der gesamten Kette vom Unterzeichner bis zur Stamm-Zertifizierungsstelle.

Starten Sie eine kostenlose 30-Tage-Testversion, um die Zertifikatsprüfung in Ihrer Verifizierungspipeline zu testen.

NuGet Mit NuGet installieren

PM >  Install-Package IronPdf

Schauen Sie sich IronPDF auf NuGet für eine schnelle Installation an. Mit über 10 Millionen Downloads transformiert es die PDF-Entwicklung mit C#. Sie können auch das DLL oder den Windows Installer herunterladen.

Schnellstart: Lesen des Zertifikats des Unterzeichners aus einer signierten PDF-Datei

Rufen Sie GetVerifiedSignatures für eine geladene PDF-Datei auf und lesen Sie die Zertifikateigenschaften des Unterzeichners direkt aus dem Ergebnis aus.

  1. Installieren Sie IronPDF mit NuGet Package Manager

    PM > Install-Package IronPdf
  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    var sig = PdfDocument.FromFile("signed.pdf").GetVerifiedSignatures().First();
    var cert = sig.SignerCertificate;
    Console.WriteLine($"{cert?.CommonName} ({cert?.Organization}) valid until {cert?.NotAfter}");
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute, IronPDF in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion

    arrow pointer


Wie extrahiert man die nationale oder persönliche ID des Unterzeichners?

Die Eigenschaft SubjectSerialNumber gibt den Wert der OID "SERIALNUMBER" aus dem Subject-DN des Zertifikats zurück. In regulierten Branchen (eIDAS-qualifizierte Zertifikate, Bankwesen, von Behörden ausgestellte digitale Ausweise) enthält dieses Feld die nationale Identifikationsnummer, die Steuernummer oder die persönliche Identifikationsnummer des Unterzeichners. Es handelt sich nicht um die Seriennummer des Zertifikats selbst; Das ist CertificateSerialNumber.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-serial-number.cs
using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("eidas-signed-invoice.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Subject DN SERIALNUMBER OID (national ID, tax ID, etc.)
    Console.WriteLine($"Signer Identity (SERIALNUMBER): {cert.SubjectSerialNumber ?? "not present"}");

    // Certificate's own serial from the issuing CA
    Console.WriteLine($"Certificate Serial (CA-issued):  {cert.CertificateSerialNumber}");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection

Dim pdf = PdfDocument.FromFile("eidas-signed-invoice.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    ' Subject DN SERIALNUMBER OID (national ID, tax ID, etc.)
    Console.WriteLine($"Signer Identity (SERIALNUMBER): {If(cert.SubjectSerialNumber, "not present")}")

    ' Certificate's own serial from the issuing CA
    Console.WriteLine($"Certificate Serial (CA-issued):  {cert.CertificateSerialNumber}")
Next
$vbLabelText   $csharpLabel

TippsKurze Erinnerung zum Unterschied zwischen diesen beiden: SubjectSerialNumber gibt an, wer das Dokument signiert hat (eine Personen- oder Organisations-ID, wie eine nationale ID oder Steuernummer, die in den Subject DN eingebettet ist). CertificateSerialNumber gibt an, welches Zertifikat verwendet wurde; (Es handelt sich um die eindeutige Seriennummer, die die ausstellende Zertifizierungsstelle für Sperrlisten und Audit-Protokolle vergibt.

Wie greift man auf Convenience-Identity-Eigenschaften zu?

SignerCertificateInfo stellt die am häufigsten benötigten Subject-DN-Felder als direkte Eigenschaften bereit, sodass Sie die vollständige DN-Zeichenkette nicht selbst parsen müssen.

Lesen des Namens und der Zugehörigkeit des Unterzeichners

Die Eigenschaften CommonName, Organization, Country und Email decken ab, worauf die meisten Identitäts-Workflows als Erstes zurückgreifen.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-identity-common.cs
using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("signed-agreement.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Common Subject DN fields exposed directly as properties
    Console.WriteLine($"CommonName (CN):  {cert.CommonName}");
    Console.WriteLine($"Organization (O): {cert.Organization}");
    Console.WriteLine($"Country (C):      {cert.Country}");
    Console.WriteLine($"Email:            {cert.Email}");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection

Dim pdf = PdfDocument.FromFile("signed-agreement.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    ' Common Subject DN fields exposed directly as properties
    Console.WriteLine($"CommonName (CN):  {cert.CommonName}")
    Console.WriteLine($"Organization (O): {cert.Organization}")
    Console.WriteLine($"Country (C):      {cert.Country}")
    Console.WriteLine($"Email:            {cert.Email}")
Next
$vbLabelText   $csharpLabel

Die Eigenschaft Email überprüft zunächst den Subject-DN auf die OID emailAddress. Falls nicht vorhanden, wird auf die Subject Alternative Name (SAN)-Erweiterung rfc822Name zurückgegriffen. Die Eigenschaft Country gibt den zweistelligen ISO 3166-1 Alpha-2-Code zurück (zum Beispiel "DE", "US", "FR"). Alle Komfort-Eigenschaften geben null zurück, wenn das entsprechende Feld im Zertifikat nicht vorhanden ist.

Lesen Sie den vollständigen DN, wenn Sie alles wissen möchten

Für Audit-Protokollierung, nachgelagertes Parsing oder Compliance-Berichte geben SubjectDN und IssuerDN die vollständigen Distinguished Name-Zeichenfolgen zurück.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-identity-full-dn.cs
using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("signed-agreement.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Full DN strings for audit logging or downstream parsing
    Console.WriteLine($"Full Subject DN: {cert.SubjectDN}");
    Console.WriteLine($"Full Issuer DN:  {cert.IssuerDN}");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection

Dim pdf = PdfDocument.FromFile("signed-agreement.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    ' Full DN strings for audit logging or downstream parsing
    Console.WriteLine($"Full Subject DN: {cert.SubjectDN}")
    Console.WriteLine($"Full Issuer DN:  {cert.IssuerDN}")
Next
$vbLabelText   $csharpLabel
Icon Quote related to Lesen Sie den vollständigen DN, wenn Sie alles wissen möchten

Meine Lieblingsbibliothek dieser Art ist IronPDF. Es ermöglicht eine schnelle und effiziente Bearbeitung von PDF-Dateien. Es verfügt auch über viele wertvolle Funktionen, wie das Exportieren in das PDF/A-Format und das digitale Signieren von PDF-Dokumenten.

Milan Jovanovic related to Lesen Sie den vollständigen DN, wenn Sie alles wissen möchten

Milan Jovanovic

Microsoft MVP

Fallstudie ansehen
Icon Quote related to Lesen Sie den vollständigen DN, wenn Sie alles wissen möchten

IronOCR bedeutet, dass wir jährlich 40.000 $ durch manuelle Verarbeitung einsparen können, während die Produktivität gesteigert wird und Ressourcen für wichtige Aufgaben freigesetzt werden. Ich würde es sehr empfehlen.

Brent Matzelle related to Lesen Sie den vollständigen DN, wenn Sie alles wissen möchten

Brent Matzelle

Technischer Leiter, OPYN

Fallstudie ansehen
Icon Quote related to Lesen Sie den vollständigen DN, wenn Sie alles wissen möchten

Die Iron Suite spielt eine entscheidende Rolle in unseren Operationen. Diese Werkzeuge erhöhen die Effizienz im gesamten Unternehmen, einschließlich der Erstellung von Grundrissen und der Verbesserung des Bestandsmanagements.

David Jones related to Lesen Sie den vollständigen DN, wenn Sie alles wissen möchten

David Jones

Leitender Software-Ingenieur, Agorus Build

Fallstudie ansehen

Wie extrahiert man beliebige Betreff- und Absenderfelder?

Die Methoden GetSubjectField(string) und GetIssuerField(string) akzeptieren entweder Kurznamen oder numerische OIDs. Sie sind groß-/kleinschreibungsunabhängig und geben null zurück, wenn das Feld nicht vorhanden ist.

Unterstützte Kurznamen: CN, O, OU, C, L, ST, E, SERIALNUMBER, SURNAME, T, GIVENNAME, UID, ORGANIZATIONIDENTIFIER.

Lesen beliebiger Themenbereiche (einschließlich eIDAS-OIDs)

Übergeben Sie einen Kurznamen wie "OU" oder eine numerische OID wie "2.5.4.97" (den eIDAS-Organisationsidentifikator), um ein beliebiges Feld aus dem Subject-DN abzurufen.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-field-subject.cs
using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("eidas-contract.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Short-name lookups (case-insensitive)
    string? orgUnit = cert.GetSubjectField("OU");
    string? surname = cert.GetSubjectField("SURNAME");
    string? givenName = cert.GetSubjectField("GIVENNAME");
    string? title = cert.GetSubjectField("T");

    // Numeric OID lookup (eIDAS organizationIdentifier)
    string? orgId = cert.GetSubjectField("2.5.4.97");

    Console.WriteLine($"Name: {givenName} {surname} ({title}), OU: {orgUnit}");
    Console.WriteLine($"eIDAS Org ID (2.5.4.97): {orgId ?? "not present"}");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection

Dim pdf = PdfDocument.FromFile("eidas-contract.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    ' Short-name lookups (case-insensitive)
    Dim orgUnit As String = cert.GetSubjectField("OU")
    Dim surname As String = cert.GetSubjectField("SURNAME")
    Dim givenName As String = cert.GetSubjectField("GIVENNAME")
    Dim title As String = cert.GetSubjectField("T")

    ' Numeric OID lookup (eIDAS organizationIdentifier)
    Dim orgId As String = cert.GetSubjectField("2.5.4.97")

    Console.WriteLine($"Name: {givenName} {surname} ({title}), OU: {orgUnit}")
    Console.WriteLine($"eIDAS Org ID (2.5.4.97): {If(orgId, "not present")}")
Next
$vbLabelText   $csharpLabel

Die numerische OID-Suche ist für eIDAS- und regulierte Branchenzertifikate unerlässlich, die Organisationskennungen, professionelle Qualifikationen oder rechtsraumspezifische Felder enthalten, die nicht durch Standard-Kurznamen abgedeckt sind.

Lesen der Felder des Ausstellers

GetIssuerField funktioniert auf die gleiche Weise in Bezug auf den Distinguished Name der ausstellenden Zertifizierungsstelle. Dies ist nützlich für die Vertrauensvalidierung, die CA-Berichterstattung und die Gruppierung von Signaturen nach ihrer ausstellenden Stelle.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-field-issuer.cs
using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("eidas-contract.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // GetIssuerField works the same way as GetSubjectField
    string? issuerCN = cert.GetIssuerField("CN");
    string? issuerO = cert.GetIssuerField("O");
    string? issuerCountry = cert.GetIssuerField("C");

    Console.WriteLine($"Issued by: {issuerCN} ({issuerO}, {issuerCountry})");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection

Dim pdf = PdfDocument.FromFile("eidas-contract.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    ' GetIssuerField works the same way as GetSubjectField
    Dim issuerCN As String = cert.GetIssuerField("CN")
    Dim issuerO As String = cert.GetIssuerField("O")
    Dim issuerCountry As String = cert.GetIssuerField("C")

    Console.WriteLine($"Issued by: {issuerCN} ({issuerO}, {issuerCountry})")
Next
$vbLabelText   $csharpLabel

Wie überprüft man die Gültigkeit eines Zertifikats?

SignerCertificateInfo bietet zwei Validierungshilfen:

  • IsExpired gibt true zurück, wenn DateTime.UtcNow > NotAfter.
  • IsValidAt(DateTime) gibt true zurück, wenn der angegebene Zeitstempel in das Zeitfenster NotAfter von Windows fällt. Die typische Verwendung besteht darin, zu überprüfen, ob das Zertifikat zum Zeitpunkt der Signierung gültig war.
:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-validity.cs
using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("archived-contract.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    Console.WriteLine($"Valid from:  {cert.NotBefore}");
    Console.WriteLine($"Valid until: {cert.NotAfter}");
    Console.WriteLine($"Expired now: {cert.IsExpired}");

    // Confirm certificate was valid when the document was signed
    bool validAtSigning = cert.IsValidAt(sig.SigningDate);
    Console.WriteLine($"Valid at signing time ({sig.SigningDate}): {validAtSigning}");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection

Dim pdf = PdfDocument.FromFile("archived-contract.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    Console.WriteLine($"Valid from:  {cert.NotBefore}")
    Console.WriteLine($"Valid until: {cert.NotAfter}")
    Console.WriteLine($"Expired now: {cert.IsExpired}")

    ' Confirm certificate was valid when the document was signed
    Dim validAtSigning As Boolean = cert.IsValidAt(sig.SigningDate)
    Console.WriteLine($"Valid at signing time ({sig.SigningDate}): {validAtSigning}")
Next
$vbLabelText   $csharpLabel

TippsIsExpired gibt false (nicht true) zurück, wenn Gültigkeitsdaten nicht aus dem Zertifikat extrahiert werden können. Der Helper ist bewusst konservativ; er geht nicht davon aus, dass etwas abgelaufen ist, nur weil Metadaten fehlen. Bei Zero-Trust-Workflows sind fehlende Gültigkeitsdaten ausdrücklich als Fehlerfall zu behandeln.

Für Prüfpfade protokollieren Sie sowohl die IsExpired-Prüfung (aktuelle Gültigkeit) als auch die IsValidAt(signingDate)-Prüfung (Gültigkeit zum Zeitpunkt der Signierung). Ein Zertifikat, das inzwischen abgelaufen ist, war zum Zeitpunkt der Unterzeichnung des Dokuments möglicherweise noch gültig; Beide Datenpunkte sind für die Compliance von Bedeutung.

Wie verwendet man den SHA-256-Fingerabdruck für das Certificate Pinning?

Die Eigenschaft Sha256Thumbprint gibt eine 64 Zeichen lange Hexadezimalzeichenfolge in Großbuchstaben zurück, den SHA-256-Hash des DER-kodierten Zertifikats. Dies ist der Wert, den Sie mit einer Liste bekannter, vertrauenswürdiger Signaturzertifikate abgleichen.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-thumbprint-pinning.cs
using IronPdf;
using IronPdf.Signing.Inspection;
using System.Collections.Generic;

// Known-good signer thumbprints from a compliance database
var pinnedThumbprints = new HashSet<string>
{
    "A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2",
    "F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5"
};

var pdf = PdfDocument.FromFile("submitted-form.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Pin against trusted thumbprint list
    bool trusted = pinnedThumbprints.Contains(cert.Sha256Thumbprint);
    Console.WriteLine($"Signer: {cert.CommonName}, Thumbprint: {cert.Sha256Thumbprint}");
    Console.WriteLine($"Pinned: {trusted}");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection
Imports System.Collections.Generic

' Known-good signer thumbprints from a compliance database
Dim pinnedThumbprints As New HashSet(Of String) From {
    "A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2",
    "F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5"
}

Dim pdf = PdfDocument.FromFile("submitted-form.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    ' Pin against trusted thumbprint list
    Dim trusted As Boolean = pinnedThumbprints.Contains(cert.Sha256Thumbprint)
    Console.WriteLine($"Signer: {cert.CommonName}, Thumbprint: {cert.Sha256Thumbprint}")
    Console.WriteLine($"Pinned: {trusted}")
Next
$vbLabelText   $csharpLabel

Wie erstellt man ein X509Certificate2 aus Rohdaten eines Zertifikats?

Die Eigenschaft RawData gibt das DER-kodierte Zertifikat als byte[] zurück. Jeder Aufruf gibt eine defensive Kopie zurück, sodass die internen Daten niemals per Referenz offengelegt werden. Sie können dies verwenden, um ein System.Security.Cryptography.X509Certificates.X509Certificate2 für die Interoperabilität mit den nativen kryptografischen APIs von .NET zu erstellen (Kettenaufbau, Richtlinienvalidierung, CRL-Prüfung).

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-x509-interop.cs
using IronPdf;
using IronPdf.Signing.Inspection;
using System.Security.Cryptography.X509Certificates;

var pdf = PdfDocument.FromFile("signed-report.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Construct X509Certificate2 from defensive DER copy
    byte[] derBytes = cert.RawData;
    var x509 = new X509Certificate2(derBytes);

    Console.WriteLine($"X509 Subject:    {x509.Subject}");
    Console.WriteLine($"X509 Issuer:     {x509.Issuer}");
    Console.WriteLine($"X509 Serial:     {x509.SerialNumber}");
    Console.WriteLine($"X509 Algorithm:  {x509.SignatureAlgorithm.FriendlyName}");
    Console.WriteLine($"X509 Key Size:   {x509.PublicKey.Key.KeySize} bits");
}
Imports IronPdf
Imports IronPdf.Signing.Inspection
Imports System.Security.Cryptography.X509Certificates

Dim pdf = PdfDocument.FromFile("signed-report.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Dim cert = sig.SignerCertificate
    If cert Is Nothing Then Continue For

    ' Construct X509Certificate2 from defensive DER copy
    Dim derBytes As Byte() = cert.RawData
    Dim x509 = New X509Certificate2(derBytes)

    Console.WriteLine($"X509 Subject:    {x509.Subject}")
    Console.WriteLine($"X509 Issuer:     {x509.Issuer}")
    Console.WriteLine($"X509 Serial:     {x509.SerialNumber}")
    Console.WriteLine($"X509 Algorithm:  {x509.SignatureAlgorithm.FriendlyName}")
    Console.WriteLine($"X509 Key Size:   {x509.PublicKey.Key.KeySize} bits")
Next
$vbLabelText   $csharpLabel

Hinweis:Jeder Zugriff auf RawData gibt eine neue defensive Kopie zurück. Das interne Byte-Array wird niemals per Referenz offengelegt, sodass eine Änderung der zurückgegebenen Bytes keine Auswirkungen auf spätere Aufrufe hat.

Über diesen Interop-Pfad können Sie die Signaturprüfung von IronPDF in bestehende .NET-Zertifikatsvalidierungspipelines integrieren, wie z. B. X509Chain.Build(), die Sperrlistenprüfung über CRL/OCSP oder benutzerdefinierte X509CertificateValidator-Implementierungen.

Wie durchläuft man die Zertifikatskette?

Die Eigenschaft CertificateChain auf VerifiedSignature gibt eine IReadOnlyList<SignerCertificateInfo> zurück, die in der Reihenfolge Unterzeichner → Zwischen-Zertifizierungsstelle(n) → Stamm-Zertifizierungsstelle angeordnet ist. Index 0 ist immer das Signaturzertifikat (dasselbe Objekt wie SignerCertificate). Die Liste ist niemals null; Wenn die Kette nicht extrahiert werden kann, enthält sie nur das Zertifikat des Unterzeichners.

:path=/static-assets/pdf/content-code-examples/how-to/verify-pdf-signatures-chain-walking.cs
using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("enterprise-signed.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    Console.WriteLine($"--- Signature: {sig.SignatureName} ---");
    Console.WriteLine($"Chain length: {sig.CertificateChain.Count}");

    // Walk from signer (index 0) through intermediates to root CA
    for (int i = 0; i < sig.CertificateChain.Count; i++)
    {
        var cert = sig.CertificateChain[i];
        string role = i == 0 ? "Signer"
                    : i == sig.CertificateChain.Count - 1 ? "Root CA"
                    : $"Intermediate CA ({i})";

        Console.WriteLine($"  [{role}]");
        Console.WriteLine($"    Subject:     {cert.SubjectDN}");
        Console.WriteLine($"    Issuer:      {cert.IssuerDN}");
        Console.WriteLine($"    Serial:      {cert.CertificateSerialNumber}");
        Console.WriteLine($"    Valid:       {cert.NotBefore} to {cert.NotAfter}");
        Console.WriteLine($"    Expired:     {cert.IsExpired}");
        Console.WriteLine($"    Thumbprint:  {cert.Sha256Thumbprint}");
    }
}
Imports IronPdf
Imports IronPdf.Signing.Inspection

Dim pdf = PdfDocument.FromFile("enterprise-signed.pdf")

For Each sig In pdf.GetVerifiedSignatures()
    Console.WriteLine($"--- Signature: {sig.SignatureName} ---")
    Console.WriteLine($"Chain length: {sig.CertificateChain.Count}")

    ' Walk from signer (index 0) through intermediates to root CA
    For i As Integer = 0 To sig.CertificateChain.Count - 1
        Dim cert = sig.CertificateChain(i)
        Dim role As String = If(i = 0, "Signer", If(i = sig.CertificateChain.Count - 1, "Root CA", $"Intermediate CA ({i})"))

        Console.WriteLine($"  [{role}]")
        Console.WriteLine($"    Subject:     {cert.SubjectDN}")
        Console.WriteLine($"    Issuer:      {cert.IssuerDN}")
        Console.WriteLine($"    Serial:      {cert.CertificateSerialNumber}")
        Console.WriteLine($"    Valid:       {cert.NotBefore} to {cert.NotAfter}")
        Console.WriteLine($"    Expired:     {cert.IsExpired}")
        Console.WriteLine($"    Thumbprint:  {cert.Sha256Thumbprint}")
    Next
Next
$vbLabelText   $csharpLabel

Hinweis:Jedes SignerCertificateInfo in der Kette legt dieselben Eigenschaften offen wie SignerCertificate: Identitätsfelder, Gültigkeit, Fingerabdruck, RawData, GetSubjectField() und GetIssuerField(). Sie können das Ablaufdatum jeder Zwischen-CA überprüfen, den Fingerabdruck der Root-CA mit Ihrem vertrauenswürdigen Root-Speicher abgleichen und die gesamte Kette für Compliance-Audits protokollieren.

Nächste Schritte

SignerCertificate und CertificateChain bieten Ihnen eine vollständige X.509-Prüfung, ohne dass Sie die IronPDF-API-Oberfläche verlassen müssen. Von hier aus sind die nächsten logischen Schritte eine vertiefte Betrachtung der Teile von IronPDF, in die diese Komponenten eingebunden sind.

Für den Signaturteil des Workflows behandelt die Anleitung zu digitalen Signaturen die Erstellung von Zertifikaten, Metadaten und inkrementelles Signieren. Für die HSM-basierte Signatur in Hochsicherheitsumgebungen behandelt der HSM-Signaturleitfaden die PKCS#11-Integration. Benötigen Sie einsatzbereite Code-Schnipsel? Das Code-Beispiel für digitale Signaturen liefert diese.

Sind Sie bereit, es an Ihren eigenen signierten PDFs auszuprobieren? Starten Sie Ihre kostenlose 30-Tage-Testversion oder sehen Sie sich die Lizenzoptionen an.

Häufig gestellte Fragen

Welchem Zweck dient das Auslesen von X.509-Zertifikatdetails aus PDF-Signaturen?

Das Auslesen von X.509-Zertifikatdetails aus PDF-Signaturen ermöglicht es, die Identität des Unterzeichners zu verifizieren, die Gültigkeit des Zertifikats zu überprüfen und die Einhaltung von Standards wie eIDAS sicherzustellen. Dieser Prozess ist entscheidend für die Wahrung der Authentizität und Integrität von Dokumenten.

Wie hilft IronPDF beim Extrahieren der Unterzeichneridentität aus PDF-Signaturen?

IronPDF bietet Werkzeuge zum Extrahieren der Unterzeichneridentität aus PDF-Signaturen durch Zugriff auf X.509-Zertifikatdetails, womit es einfacher wird, die Quelle des Dokuments zu authentifizieren und die Anmeldeinformationen des Unterzeichners zu überprüfen.

Kann IronPDF eIDAS-Felder aus PDF-Signaturen extrahieren?

Ja, IronPDF kann eIDAS-Felder aus PDF-Signaturen extrahieren, wodurch Entwickler sicherstellen können, dass Dokumente den europäischen Vorschriften bezüglich elektronischer Signaturen entsprechen.

Welche Informationen können mit IronPDF aus einer PDF-Signatur abgerufen werden?

Mit IronPDF können Informationen wie die Identität des Unterzeichners, die Gültigkeit des Zertifikats, der Fingerabdruck und die Zertifikatskette aus einer PDF-Signatur abgerufen werden, wodurch eine umfassende Sicht auf die Authentizität der Signatur geboten wird.

Ist es möglich, die Gültigkeit einer PDF-Signatur mit IronPDF zu überprüfen?

Ja, mit IronPDF können Sie die Gültigkeit einer PDF-Signatur überprüfen, indem Sie die X.509-Zertifikatdetails inspizieren, was das Überprüfen der Ablaufdaten und der Integrität des Signaturzertifikats einschließen kann.

Welche Vorteile bietet IronPDF für die PDF-Signaturverifikation?

Die Verwendung von IronPDF für die PDF-Signaturverifikation bietet Vorteile wie die automatisierte Extraktion detaillierter Zertifikatsinformationen, Kompatibilität mit C#-Anwendungen und die Einhaltung internationaler Standards wie eIDAS.

Wie geht IronPDF mit der Fingerabdruck-Extraktion von PDF-Signaturen um?

IronPDF bearbeitet die Fingerabdruck-Extraktion, indem es auf die X.509-Zertifikatdetails innerhalb einer PDF-Signatur zugreift und Ihnen ermöglicht, die Authentizität und Integrität des Zertifikats durch seinen einzigartigen Fingerabdruck zu verifizieren.

Kann IronPDF eine Zertifikatskette aus einer PDF-Signatur bereitstellen?

IronPDF kann die Zertifikatskette aus einer PDF-Signatur bereitstellen, was Ihnen hilft, den Vertrauenspfad von dem Zertifikat des Unterzeichners bis zu einem vertrauenswürdigen Wurzelzertifikat zu verfolgen und so die Gültigkeit der Signatur sicherzustellen.

Welche Programmiersprache wird von IronPDF für das Auslesen von PDF-Signaturen unterstützt?

IronPDF unterstützt C# für das Auslesen und Verifizieren von PDF-Signaturen, was es ideal für Entwickler macht, die innerhalb des .NET-Ökosystems arbeiten.

Entspricht IronPDF internationalen Standards für elektronische Signaturen?

Ja, IronPDF entspricht internationalen Standards wie eIDAS und stellt sicher, dass Ihre PDF-Signaturverifikationsprozesse die regulatorischen Anforderungen für elektronische Signaturen erfüllen.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 19,936,792 | Version: 2026.7 gerade veröffentlicht
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package IronPdf
Führen Sie eine Probe aus Sehen Sie zu, wie Ihr HTML-Code in eine PDF-Datei umgewandelt wird.