So lesen Sie das Zertifikat des Unterzeichners aus verifizierten PDF-Signaturen in C# (X.509, eIDAS, Chain)
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
SubjectSerialNumberund Lesen numerischer OIDs wie2.5.4.97fü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.
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.
-
Installieren Sie IronPDF mit NuGet Package Manager
PM > Install-Package IronPdf -
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}"); -
Bereitstellen zum Testen in Ihrer Live-Umgebung
Beginnen Sie noch heute, IronPDF in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion
Minimaler Arbeitsablauf (3 Schritte)
- Laden Sie IronPDF von NuGet herunter
- Laden Sie ein signiertes PDF hoch und rufen Sie
GetVerifiedSignatures()auf, um eine Liste verifizierter Signaturobjekte abzurufen - Lesen
sig.SignerCertificatefür Identität und Gültigkeit oder gehen Siesig.CertificateChainfür die vollständige Vertrauenskette
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
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
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
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
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
Wie überprüft man die Gültigkeit eines Zertifikats?
SignerCertificateInfo bietet zwei Validierungshilfen:
IsExpiredgibttruezurück, wennDateTime.UtcNow > NotAfter.IsValidAt(DateTime)gibttruezurück, wenn der angegebene Zeitstempel in das ZeitfensterNotAftervon 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
if (sig.SigningDate.HasValue)
{
bool validAtSigning = cert.IsValidAt(sig.SigningDate.Value);
Console.WriteLine($"Valid at signing time ({sig.SigningDate.Value}): {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
If sig.SigningDate.HasValue Then
Dim validAtSigning As Boolean = cert.IsValidAt(sig.SigningDate.Value)
Console.WriteLine($"Valid at signing time ({sig.SigningDate.Value}): {validAtSigning}")
End If
Next
IsExpired 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
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
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
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.

