using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external html assets: Images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
Digitale Signatur zu PDF in C# mit Itextsharp hinzufügen
Chipego Kalinda
24. April 2025
Teilen Sie:
Einführung
In der heutigen schnelllebigen digitalen Welt wird physisches Papier zunehmend durch elektronische Dokumente ersetzt. Ob es nun darum geht, einen Vertrag zu unterschreiben, eine Rechnung zu genehmigen oder ein Regierungsformular einzureichen, digitale Dokumentation ist zur neuen Normalität geworden. Doch mit der Bequemlichkeit kommt ein neues Anliegen: Wie stellen Sie die Authentizität und Integrität dieser digitalen Dokumente sicher?
Elektronische Unterschriften eingeben. Viel mehr als nur eine Kritzelei auf einem Touchscreen, verwenden digitale Signaturen kryptografische Techniken, um die Identität des Unterzeichners zu verifizieren und zu garantieren, dass der Inhalt eines Dokuments nicht verändert wurde. Für C#-Entwickler ist die Integration dieses Sicherheitsniveaus in PDF-Workflows einfacher denn je – insbesondere mit Werkzeugen wie IronPDF und iTextSharp. In diesem Artikel gehen wir den Prozess des digitalen Signierens von PDFs durch, vergleichen Bibliotheken, geben Best Practices und helfen Ihnen, die richtige Lösung für Ihr nächstes Projekt auszuwählen.
Verständnis von digitalen Signaturen
Eine digitale Signatur ist eine kryptografische Technik, die zur Validierung der Authentizität und Integrität einer digitalen Nachricht oder eines Dokuments verwendet wird. Anders als eine einfache bildbasierte Signatur oder ein getippter Name verwendet eine digitale Signatur einen privaten Schlüssel, um einen Hash des Dokuments zu verschlüsseln. Dieser verschlüsselte Hash kann dann von jedem überprüft werden, der den öffentlichen Schlüssel des Unterzeichners verwendet.
Warum ist das wichtig? Weil es zwei Dinge sicherstellt:
Authentifizierung – Die Signatur wird verwendet, um PDF-Dokumente zu verifizieren, die vom angegebenen Absender stammen.
Integrität – Das Dokument wurde seit seiner Unterzeichnung nicht verändert. Sogar eine kleine Änderung macht die Signatur ungültig.
Digitale Signaturen sind in vielen Rechtsgebieten rechtlich bindend und sind in Branchen wie Finanzen, Gesundheitswesen, Recht und Regierung von entscheidender Bedeutung.
Warum digitale Signaturen in PDFs verwenden?
PDFs sind das Standardformat für die Verteilung professioneller Dokumente, von rechtlichen Verträgen bis hin zu offiziellen Berichten. Das Hinzufügen digitaler Signaturen zu PDFs dient mehreren wichtigen Zwecken:
Rechtmäßigkeit & Compliance: Digitale Signaturen entsprechen Vorschriften wie eIDAS (Europa), ESIGN (USA) und anderen, wodurch sie rechtlich anerkannt sind.
Sicherheit: Signierte Dokumente können nicht verändert werden, ohne die Signatur zu beschädigen, was Schutz vor Manipulation oder Betrug bietet.
Effizienz: Kein Drucken, Unterschreiben und Scannen erforderlich. Sparen Sie Zeit und optimieren Sie Arbeitsabläufe mit sicheren digitalen Genehmigungen.
Vertrauen: Kunden und Partner können die Herkunft und Integrität von Dokumenten mit Zuversicht überprüfen.
Zusammenfassend bringen digitale Signaturen Vertrauen und Effizienz in Ihre Dokumenten-Workflows.
Vergleich von iTextSharp und IronPDF
Bei der Implementierung digitaler Signaturen in C# fallen oft zwei Bibliotheken besonders auf: iTextSharp und IronPDF. Beide sind leistungsfähige Tools, aber sie richten sich an unterschiedliche Arten von Entwicklern und Projektanforderungen. Lassen Sie uns aufschlüsseln, wie sie sich im praktischen Einsatz vergleichen.
iTextSharp: Leistung mit Komplexität
iTextSharpist ein bekannter Name in der Welt der PDF-Bearbeitung. Es ist Teil des breiteren iText 7-Ökosystems und bietet umfangreiche Unterstützung für Low-Level-PDF-Operationen, einschließlich kryptografischer digitaler Signierung.
Entwickler, die feinkörnige Kontrolle über die Signaturdarstellung, Hash-Algorithmen, Zertifikatketten und benutzerdefinierte Validierungs-Workflows benötigen, werden iTextSharp als sehr fähig empfinden. Es ist hochgradig erweiterbar und mit Blick auf komplexe Unternehmensanforderungen entwickelt.
Diese Flexibilität hat jedoch ihren Preis. Die Lernkurve ist steil. Einfache Aufgaben, wie das Hinzufügen einer sichtbaren Signatur, erfordern oft mehrere Klassen, Streams und Konfigurationsschritte. Für neue Benutzer kann dies überwältigend sein.
Zusätzlich wird iTextSharp unter der AGPL lizenziert, die erfordert, dass Ihre Anwendung Open Source ist, es sei denn, Sie erwerben eine kommerzielle Lizenz—ein K.-o.-Kriterium für viele Closed-Source- oder proprietäre Projekte.
IronPDF: Einfachheit trifft auf Professionalität
IronPDF hingegen verfolgt einen modernen, entwicklerorientierten Ansatz. Seine API ist darauf ausgelegt, gängige PDF-Aufgaben wie digitale Signaturen, Erstellen, Zusammenführen und Bearbeiten mit minimalem Aufwand zu bewältigen. Was in iTextSharp ein Dutzend Schritte erfordern könnte, erfordert in IronPDF oft nur ein oder zwei Zeilen. Dies macht es zu einer leistungsstarken PDF-Bibliothek für .NET Framework-Projekte.
Beispielsweise erfordert das Signieren eines PDFs in IronPDF nicht das direkte Arbeiten mit Streams oder kryptografischen Einstellungen. Sie laden einfach das PDF, rufen .SignPdf() auf und übergeben Ihr Zertifikat. Es unterstützt sogar zusätzliche Metadaten wie den Standort des Unterzeichners, den Grund und die Kontaktinformationen – alles in einem einzigen Methodenaufruf.
Ein weiterer wesentlicher Vorteil ist die Lizenzierung. IronPDF bietet eine kommerziell-freundliche Lizenz ohne AGPL-Einschränkungen an, die ideal für professionelle und unternehmenstaugliche Anwendungen ist. Und obwohl es sich um ein kostenpflichtiges Produkt handelt, erleichtert eine großzügige kostenlose Testversion die Bewertung, bevor Sie sich festlegen.
Lizenz AGPL (oder kostenpflichtige kommerzielle Lizenz) Kommerzielle Lizenz ohne Open-Source-Auflage
Signaturanpassung Hochgradig anpassbar mit Kryptographiekontrolle Vereinfachte API mit optionalen Metadatenfeldern
Dokumentation Detailliert, aber dicht Eindeutige Beispiele mit entwicklerorientierter Dokumentation
Am besten geeignet für Unternehmensanwendungen mit umfassender Anpassung Teams, die eine schnelle Implementierung und Unterstützung benötigen
Erste Schritte mit iTextSharp und IronPDF
Bevor Sie sich mit der Implementierung digitaler Signaturen befassen, ist es wichtig zu verstehen, wie Sie mit jeder Bibliothek beginnen können. Ob Sie eine Unternehmenslösung oder ein schnelles internes Tool entwickeln, die richtige Einrichtung kann den entscheidenden Unterschied ausmachen.
Einrichtung von iTextSharp
iTextSharp ist der .NET-Port der leistungsstarken Java-basierten iText PDF-Bibliothek. Um zu beginnen, müssen Sie es über NuGet installieren und die richtigen Namespaces in Ihrem Projekt referenzieren.
Einrichtung
Sie können die iTextSharp-Bibliothek ganz einfach über die NuGet-Paket-Manager-Konsole in Ihr Projekt installieren. Sie müssen nur den folgenden Befehl ausführen:
Install-Package iTextSharp
Install-Package iTextSharp
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package iTextSharp
$vbLabelText $csharpLabel
Diese einfache Installation gewährleistet eine schnelle Implementierung dieser Bibliothek in Ihrem C#-Projekt.
Grundkonfiguration
Sobald installiert, können Sie iTextSharp-Namespaces in Ihrem Projekt verwenden:
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.security;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.security;
Beachten Sie, dass iTextSharp modular aufgebaut ist. Wenn Sie planen, erweiterte kryptografische Funktionen oder Zeitstempelung zu nutzen, benötigen Sie wahrscheinlich zusätzliche Pakete wie BouncyCastle.Cryptography. Dies kann ähnlich wie iTextSharp installiert werden, führen Sie einfach die Zeile aus:
Install-Package BouncyCastle.Cryptography
Install-Package BouncyCastle.Cryptography
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package BouncyCastle.Cryptography
$vbLabelText $csharpLabel
Dinge, auf die Sie achten sollten
Lizenzierung: Die AGPL-Lizenz erfordert, dass jede Software, die iTextSharp verwendet, Open-Source sein muss, es sei denn, Sie erwerben eine kommerzielle Lizenz.
Abhängigkeiten: Kryptographische Operationen erfordern oft BouncyCastle zur Zertifikatsverwaltung.
Lernkurve: Selbst das grundlegende Signieren erfordert das Verständnis von PdfSigner, IExternalSignature und verschiedenen kryptografischen Anbietern.
Wenn Sie sich mit der Konfiguration dieser Bausteine wohlfühlen und die volle Kontrolle über den Signierungsprozess benötigen (z. B. Festlegung des Erscheinungsbildes, Validierungsstufe oder Zeitstempel-Server), ist iTextSharp eine solide Wahl.
IronPDF einrichten
IronPDF ist eine kommerzielle PDF-Bibliothek, die mit Blick auf die Produktivität von Entwicklern entwickelt wurde. Es ist für .NET-Entwickler konzipiert, die PDFs mit minimalem Aufwand erstellen, bearbeiten und signieren möchten. IronPDF bietet ein viel reibungsloseres Onboarding-Erlebnis, insbesondere für diejenigen, die saubere APIs und schnelle Ergebnisse schätzen.
Einrichtung
Installieren Sie das neueste IronPDF-Paket über NuGet:
Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
$vbLabelText $csharpLabel
Oder verwenden Sie die .NET CLI:
dotnet add package IronPdf
dotnet add package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'dotnet add package IronPdf
$vbLabelText $csharpLabel
Grundkonfiguration
Beginnen Sie mit dem Importieren des Hauptnamensraums von IronPDF:
using IronPdf;
using IronPdf;
Imports IronPdf
$vbLabelText $csharpLabel
Das war's – Sie sind bereit, eine PDF-Datei zu laden und digitale Signaturen hinzuzufügen.
IronPDF verwaltet alles intern: Zertifikatsladung, Positionierung der sichtbaren Signatur, Metadaten und der endgültige Export. Sie müssen PDF-Streams oder kryptografische Algorithmen nicht manuell verwalten, was einen großen Vorteil für die schnelle Entwicklung darstellt.
Hauptvorteile für Anfänger
All-in-One: Keine zusätzlichen Abhängigkeiten oder Kryptografiebibliotheken erforderlich.
Keine AGPL-Sorgen: IronPDF bietet eine unbefristete Lizenz und eine großzügige kostenlose Testversion an.
Visuelle Darstellung: IronPDF rendert PDFs genau so, wie sie beim Ausdrucken erscheinen würden, was es ideal für Verträge und offizielle Dokumente macht.
Schritt-für-Schritt: Hinzufügen einer digitalen Signatur
1. Bereiten Sie Ihr Zertifikat vor
Sie benötigen eine .pfx-Digitale Zertifikatsdatei und ein Passwort. Diese werden verwendet, um die digitale Signatur zu erzeugen. Sie können ein Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle (Certificate Authority, CA) erhalten oder eines für den internen Gebrauch mit Tools wie OpenSSL erzeugen.
2. PDF-Signierung mit iTextSharp und BouncyCastle
Die erforderlichen Namespaces einbinden
Zuerst müssen wir sicherstellen, dass wir die korrekten using-Anweisungen am Anfang des Codes haben, um Zugriff auf die verschiedenen Klassen und Methoden zu erhalten, die erforderlich sind, um ein PDF digital mit iTextSharp zu signieren.
using System;
using System.IO;
using System.Linq;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.security;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Pkcs;
using System;
using System.IO;
using System.Linq;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.security;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Pkcs;
Wir geben den Pfad zur vorhandenen PDF-Datei an und laden sie in einen PdfReader. Wir werden auch einige String-Variablen zuweisen, die später im Code verwendet werden.
// Path to the unsigned PDF you want to sign
string filename = "example.pdf";
// Load the existing PDF into a reader
PdfReader pdfReader = new PdfReader(filename);
string reason = "Digital Signature Reason";
string location = "Digital Signature Location";
// Path to the unsigned PDF you want to sign
string filename = "example.pdf";
// Load the existing PDF into a reader
PdfReader pdfReader = new PdfReader(filename);
string reason = "Digital Signature Reason";
string location = "Digital Signature Location";
' Path to the unsigned PDF you want to sign
Dim filename As String = "example.pdf"
' Load the existing PDF into a reader
Dim pdfReader As New PdfReader(filename)
Dim reason As String = "Digital Signature Reason"
Dim location As String = "Digital Signature Location"
$vbLabelText $csharpLabel
Definieren Sie den Zertifikatspfad und das Passwort
Als Nächstes verweisen wir auf die .pfx-Zertifikatsdatei und geben das Passwort an, das zum Schutz verwendet wird.
// Path to your .pfx certificate file (must contain private key)
string pfxFilePath = "certificate-file.pfx";
// Password for the certificate (make sure to protect this securely!)
string pfxPassword = "Password";
// Path to your .pfx certificate file (must contain private key)
string pfxFilePath = "certificate-file.pfx";
// Password for the certificate (make sure to protect this securely!)
string pfxPassword = "Password";
' Path to your .pfx certificate file (must contain private key)
Dim pfxFilePath As String = "certificate-file.pfx"
' Password for the certificate (make sure to protect this securely!)
Dim pfxPassword As String = "Password"
$vbLabelText $csharpLabel
Laden Sie das .PFX-Zertifikat mit Pkcs12Store
Wir verwenden BouncyCastle, um das Zertifikat und den privaten Schlüssel in einen sicheren Speicher zu laden.
// Initialize a new PKCS#12 key store (used for handling the PFX certificate)
Pkcs12StoreBuilder Pkcs12StoreBuilder = new Pkcs12StoreBuilder();
Pkcs12Store pfxKeyStore = Pkcs12StoreBuilder.Build();
// Load the certificate and private key from the PFX file
using (FileStream pfxStream = new FileStream(pfxFilePath, FileMode.Open, FileAccess.Read))
{
// Load into the key store using the provided password
pfxKeyStore.Load(pfxStream, pfxPassword.ToCharArray());
}
// Initialize a new PKCS#12 key store (used for handling the PFX certificate)
Pkcs12StoreBuilder Pkcs12StoreBuilder = new Pkcs12StoreBuilder();
Pkcs12Store pfxKeyStore = Pkcs12StoreBuilder.Build();
// Load the certificate and private key from the PFX file
using (FileStream pfxStream = new FileStream(pfxFilePath, FileMode.Open, FileAccess.Read))
{
// Load into the key store using the provided password
pfxKeyStore.Load(pfxStream, pfxPassword.ToCharArray());
}
' Initialize a new PKCS#12 key store (used for handling the PFX certificate)
Dim Pkcs12StoreBuilder As New Pkcs12StoreBuilder()
Dim pfxKeyStore As Pkcs12Store = Pkcs12StoreBuilder.Build()
' Load the certificate and private key from the PFX file
Using pfxStream As New FileStream(pfxFilePath, FileMode.Open, FileAccess.Read)
' Load into the key store using the provided password
pfxKeyStore.Load(pfxStream, pfxPassword.ToCharArray())
End Using
$vbLabelText $csharpLabel
PdfStamper für das Hinzufügen einer Signatur vorbereiten
Ein PdfStamper ermöglicht es uns, eine digitale Signatur anzuwenden, während der Originalinhalt erhalten bleibt.
// Create a PdfStamper that enables signing and appends the signature to the document
PdfStamper pdfStamper = PdfStamper.CreateSignature(
pdfReader,
new FileStream("MyPDF_Signed.pdf", FileMode.Create), // Output path
'\0', // PDF version (unchanged)
null, // Temp file path (optional)
true // Append mode (preserves original content)
);
// Create a PdfStamper that enables signing and appends the signature to the document
PdfStamper pdfStamper = PdfStamper.CreateSignature(
pdfReader,
new FileStream("MyPDF_Signed.pdf", FileMode.Create), // Output path
'\0', // PDF version (unchanged)
null, // Temp file path (optional)
true // Append mode (preserves original content)
);
Imports Microsoft.VisualBasic
' Create a PdfStamper that enables signing and appends the signature to the document
Dim pdfStamper As PdfStamper = PdfStamper.CreateSignature(pdfReader, New FileStream("MyPDF_Signed.pdf", FileMode.Create), ControlChars.NullChar, Nothing, True)
$vbLabelText $csharpLabel
Das Erscheinungsbild der Signatur anpassen
Nun definieren wir, wie und wo die Signatur im Dokument optisch erscheinen wird.
// Access the signature appearance settings
PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;
// Add optional metadata (shows up in PDF signature details)
signatureAppearance.Reason = reason;
signatureAppearance.Location = location;
// Position the visible signature on the page (x, y, width, height in points)
float x = 360;
float y = 130;
signatureAppearance.Acro6Layers = false; // Use compact signature appearance
signatureAppearance.Layer4Text = PdfSignatureAppearance.questionMark; // Custom label text
signatureAppearance.SetVisibleSignature(
new iTextSharp.text.Rectangle(x, y, x + 150, y + 50), // Rectangle position
1, // Page number
"signature" // Field name
);
// Access the signature appearance settings
PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;
// Add optional metadata (shows up in PDF signature details)
signatureAppearance.Reason = reason;
signatureAppearance.Location = location;
// Position the visible signature on the page (x, y, width, height in points)
float x = 360;
float y = 130;
signatureAppearance.Acro6Layers = false; // Use compact signature appearance
signatureAppearance.Layer4Text = PdfSignatureAppearance.questionMark; // Custom label text
signatureAppearance.SetVisibleSignature(
new iTextSharp.text.Rectangle(x, y, x + 150, y + 50), // Rectangle position
1, // Page number
"signature" // Field name
);
' Access the signature appearance settings
Dim signatureAppearance As PdfSignatureAppearance = pdfStamper.SignatureAppearance
' Add optional metadata (shows up in PDF signature details)
signatureAppearance.Reason = reason
signatureAppearance.Location = location
' Position the visible signature on the page (x, y, width, height in points)
Dim x As Single = 360
Dim y As Single = 130
signatureAppearance.Acro6Layers = False ' Use compact signature appearance
signatureAppearance.Layer4Text = PdfSignatureAppearance.questionMark ' Custom label text
signatureAppearance.SetVisibleSignature(New iTextSharp.text.Rectangle(x, y, x + 150, y + 50), 1, "signature")
$vbLabelText $csharpLabel
Extrahieren Sie den privaten Schlüssel und signieren Sie das PDF
Wir rufen das Alias (den Namen) des Zertifikatseintrags ab, der den privaten Schlüssel enthält. Wenn das Alias existiert, fahren wir fort, die digitale Signatur mithilfe von SHA-256 zu erzeugen und einzubetten.
// Find the first alias in the PFX that has a private key entry
string alias = pfxKeyStore.Aliases.Cast<string>().FirstOrDefault(
entryAlias => pfxKeyStore.IsKeyEntry(entryAlias)
);
// Ensure a valid alias (certificate) was found
if (alias != null)
{
// Retrieve the private key for signing
ICipherParameters privateKey = pfxKeyStore.GetKey(alias).Key;
// Create a signer using SHA-256 and the private key
IExternalSignature pks = new PrivateKeySignature(privateKey, DigestAlgorithms.SHA256);
// Perform the digital signing operation using CMS format
MakeSignature.SignDetached(
signatureAppearance, // Signature appearance
pks, // External signature handler
new Org.BouncyCastle.X509.X509Certificate[] {
pfxKeyStore.GetCertificate(alias).Certificate
}, // Certificate chain (basic single-cert example)
null, null, null, // Optional CRL, OCSP, TSA
0, // Estimated size for the signature (0 = auto)
CryptoStandard.CMS // Signature standard (CMS vs CAdES)
);
}
else
{
Console.WriteLine("Private key not found in the PFX certificate.");
}
// Find the first alias in the PFX that has a private key entry
string alias = pfxKeyStore.Aliases.Cast<string>().FirstOrDefault(
entryAlias => pfxKeyStore.IsKeyEntry(entryAlias)
);
// Ensure a valid alias (certificate) was found
if (alias != null)
{
// Retrieve the private key for signing
ICipherParameters privateKey = pfxKeyStore.GetKey(alias).Key;
// Create a signer using SHA-256 and the private key
IExternalSignature pks = new PrivateKeySignature(privateKey, DigestAlgorithms.SHA256);
// Perform the digital signing operation using CMS format
MakeSignature.SignDetached(
signatureAppearance, // Signature appearance
pks, // External signature handler
new Org.BouncyCastle.X509.X509Certificate[] {
pfxKeyStore.GetCertificate(alias).Certificate
}, // Certificate chain (basic single-cert example)
null, null, null, // Optional CRL, OCSP, TSA
0, // Estimated size for the signature (0 = auto)
CryptoStandard.CMS // Signature standard (CMS vs CAdES)
);
}
else
{
Console.WriteLine("Private key not found in the PFX certificate.");
}
' Find the first alias in the PFX that has a private key entry
Dim [alias] As String = pfxKeyStore.Aliases.Cast(Of String)().FirstOrDefault(Function(entryAlias) pfxKeyStore.IsKeyEntry(entryAlias))
' Ensure a valid alias (certificate) was found
If [alias] IsNot Nothing Then
' Retrieve the private key for signing
Dim privateKey As ICipherParameters = pfxKeyStore.GetKey([alias]).Key
' Create a signer using SHA-256 and the private key
Dim pks As IExternalSignature = New PrivateKeySignature(privateKey, DigestAlgorithms.SHA256)
' Perform the digital signing operation using CMS format
MakeSignature.SignDetached(signatureAppearance, pks, New Org.BouncyCastle.X509.X509Certificate() { pfxKeyStore.GetCertificate([alias]).Certificate }, Nothing, Nothing, Nothing, 0, CryptoStandard.CMS)
Else
Console.WriteLine("Private key not found in the PFX certificate.")
End If
$vbLabelText $csharpLabel
Das Dokument abschließen
Zum Schluss schließen wir den Stamper, um den Signaturprozess abzuschließen, und schreiben das signierte PDF auf die Festplatte.
// Close the stamper to save and finalize the signed PDF
pdfStamper.Close();
// Close the stamper to save and finalize the signed PDF
pdfStamper.Close();
' Close the stamper to save and finalize the signed PDF
pdfStamper.Close()
$vbLabelText $csharpLabel
Ausgabe
3. PDFs in C# mit IronPDF digital signieren
Die erforderlichen Namespaces einbinden
Wir beginnen damit, die erforderlichen Namensräume für die Arbeit mit PDF-Signaturen, Zertifikatshandhabung und Bildpositionierung zu importieren.
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using System.Security.Cryptography.X509Certificates;
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using System.Security.Cryptography.X509Certificates;
Wir laden eine vorhandene PDF-Datei von der Festplatte mit der einfachen PdfDocument-API von IronPDF. Sie können für diese Aufgabe auch ein neues PDF-Dokument erstellen.
var pdf = PdfDocument.FromFile("example.pdf");
var pdf = PdfDocument.FromFile("example.pdf");
Dim pdf = PdfDocument.FromFile("example.pdf")
$vbLabelText $csharpLabel
Laden Sie das PFX-Zertifikat, das zum Signieren verwendet wird
Wir laden das .pfx-Zertifikat, das den privaten Schlüssel enthält. Das Exportierbar-Flag ist erforderlich, damit auf den Signaturschlüssel zugegriffen werden kann.
X509Certificate2 cert = new X509Certificate2(
"IronSoftware.pfx",
"Password",
X509KeyStorageFlags.Exportable
);
X509Certificate2 cert = new X509Certificate2(
"IronSoftware.pfx",
"Password",
X509KeyStorageFlags.Exportable
);
Dim cert As New X509Certificate2("IronSoftware.pfx", "Password", X509KeyStorageFlags.Exportable)
$vbLabelText $csharpLabel
Erstellen Sie eine neue PdfSignature mit dem Zertifikat
Wir erstellen ein neues PdfSignature-Objekt aus dem geladenen Zertifikat.
var sig = new PdfSignature(cert);
var sig = new PdfSignature(cert);
Dim sig = New PdfSignature(cert)
$vbLabelText $csharpLabel
Wenden Sie die Unterschrift an und speichern Sie das Ergebnis
Wir signieren das PDF digital und speichern das signierte PDF-Dokument als neue Datei.
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
pdf.Sign(sig)
pdf.SaveAs("signed.pdf")
$vbLabelText $csharpLabel
Ausgabe
4. Erklärung des Codes
IronPDF hält den Signaturprozess einfach und lesbar. Sie laden eine PDF-Datei, stellen ein Zertifikat bereit und rufen SignPdf() auf. Optionale Metadaten (Kontakt, Standort, Grund) verleihen Professionalität.
iTextSharp bietet mehr Kontrolle, erfordert jedoch eine detaillierte Einrichtung mit Hash-Algorithmen, Streams und Zertifikatsketten.
Zusammenfassung: Mit nur wenigen Codezeilen macht es IronPDF unglaublich einfach, digitale Signaturen mit standardmäßigen .pfx-Zertifikaten anzuwenden — keine niedrige Ebene der Kryptografie erforderlich. Dies erleichtert die Implementierung im Vergleich zu dem längeren Code, der von Bibliotheken wie iTextSharp benötigt wird, um die gleiche Aufgabe zu bewältigen.
5. Anwendungsfälle aus der realen Welt
Rechtsteams: Automatisch Verträge unterzeichnen, sobald sie aus Vorlagen generiert werden.
Finanzen: Signieren Sie Rechnungen und Berichte digital, um Manipulationen zu verhindern.
Regierungsportale: Unterschreiben Sie Formulare vor der Einreichung, um den gesetzlichen Standards zu entsprechen.
Beste Praktiken für digitale Signaturen
Um das Beste aus Ihrer Implementierung der digitalen Signatur herauszuholen:
Verwenden Sie starke Zertifikate: Wählen Sie 2048-Bit-RSA-Schlüssel oder stärkere.
Private Schlüssel sicher aufbewahren: Zertifikate sicher speichern, idealerweise in einem Hardware-Sicherheitsmodul (HSM).
Signaturen mit Zeitstempel versehen: Fügen Sie einen vertrauenswürdigen Zeitstempel hinzu, um sicherzustellen, dass die Signatur auch nach Ablauf des Zertifikats gültig bleibt.
Signaturen überprüfen: Fügen Sie eine Validierung in Ihre Anwendung ein, um Manipulationen oder abgelaufene Zertifikate zu erkennen.
Automatisieren: Planen Sie Signiervorgänge in Ihrer Bereitstellungspipeline für eine konsistente Dokumentenintegrität.
Schlussfolgerung
Das Hinzufügen digitaler Signaturen zu PDF-Dokumenten ist kein Luxus mehr—es ist eine Notwendigkeit in der heutigen sicherheitsbewussten digitalen Landschaft. Unabhängig davon, ob Sie Verträge, Rechnungen, Berichte oder juristische Dokumente schützen, sorgt eine manipulationssichere Signatur, die durch ein vertrauenswürdiges Zertifikat gestützt wird, dafür, dass Ihre Dateien ihre Authentizität und Integrität bewahren.
In diesem Artikel haben wir zwei leistungsstarke Ansätze zum Signieren von PDFs in C# untersucht:
iTextSharp, das Ihnen kryptografische Kontrolle auf niedriger Ebene und Flexibilität bietet, aber mehr Boilerplate und Vertrautheit mit BouncyCastle erfordert.
IronPDF, das eine moderne, hochrangige API bietet, die den Prozess der Anwendung sicherer Signaturen nahtlos und entwicklerfreundlich gestaltet.
Beide Tools unterstützen sichere .pfx-Zertifikate, aber IronPDF vereinfacht den Workflow deutlich – ideal für .NET-Entwickler, die weniger Zeit mit kryptografischen Primitiven verbringen und mehr Zeit mit der Schaffung von Geschäftswert verbringen möchten.
Nächste Schritte
Falls Sie es noch nicht getan haben, ziehen Sie in Betracht, eine kostenlose Testversion von IronPDF herunterzuladen und versuchen Sie, Ihre eigenen PDFs mit nur wenigen Codezeilen zu signieren. Die Produktivitätsgewinne allein sind den Wechsel wert, insbesondere bei der Arbeit an zeitkritischen Projekten.
Chipego hat eine natürliche Fähigkeit zum Zuhören, die ihm hilft, Kundenprobleme zu verstehen und intelligente Lösungen anzubieten. Er trat dem Iron Software-Team 2023 bei, nachdem er einen Bachelor of Science in Informationstechnologie erworben hatte. IronPDF und IronOCR sind die beiden Produkte, auf die sich Chipego konzentriert hat, aber sein Wissen über alle Produkte wächst täglich, da er neue Wege findet, Kunden zu unterstützen. Er genießt die Zusammenarbeit bei Iron Software, da Teammitglieder aus dem gesamten Unternehmen ihre unterschiedlichen Erfahrungen einbringen und so zu effektiven, innovativen Lösungen beitragen. Wenn Chipego nicht an seinem Schreibtisch sitzt, kann man ihn oft bei einem guten Buch oder beim Fußballspielen antreffen.
< PREVIOUS Ein Vergleich zwischen Wkhtmltopdf in Windows und IronPDF
NÄCHSTES > Ein Vergleich zwischen IronPDF und ExpertPDF for .NET