Digitales Signieren von PDFs mit C# und HSM

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

Das Hinzufügen einer Signatur zu einem PDF-Dokument ist in vielen Anwendungen eine gängige Anforderung. Bei unternehmenskritischen Anwendungen ist jedoch ein höheres Sicherheitsniveau erforderlich, bei dem der Schlüssel selbst nicht manipuliert werden darf. Ein normaler Signiervorgang mit einer .pfx Datei ist vergleichbar damit, einen Generalschlüssel für sein Haus zu haben. Die Anwendung muss den Schlüssel in den Speicher Ihres Computers laden, um das Dokument zu signieren. Wenn der Computer selbst kompromittiert wird, kann der Schlüssel gestohlen werden.

Eine weitaus sicherere Alternative ist die Verwendung eines Hardware Security Module (HSM) . Bei einem HSM (wie Ihrem USB-Token) wird der private Schlüssel innerhalb des Geräts generiert und kann dieses physisch niemals verlassen.

Dieser Vorgang ist vergleichbar mit dem Einreichen des Dokuments bei der Bank. Die Anwendung liefert eine PIN, und der "Bankmanager" (der HSM) nimmt das Dokument mit in den Tresor, stempelt es mit dem Schlüssel ab und gibt das abgestempelte Dokument zurück. Der wichtigste Aspekt ist, dass der Schlüssel den Tresor niemals verlässt. Dies stellt eine zusätzliche Sicherheitsmaßnahme dar, da der Schlüssel weder kopiert noch gestohlen werden kann.

Nutzen Sie IronPDF heute kostenlos in Ihrem Projekt.

Erster Schritt:
green arrow pointer

Unterzeichnung eines Vertrags mit einem HSM

Die Signierung mit einem HSM erfordert typischerweise ein physisches Gerät, wie beispielsweise einen USB-Token, mit dem die Anwendung interagiert. IronPDF ist mit diesen Operationen vollständig kompatibel, da sowohl die Bibliothek als auch Standard-HSMs häufig PKCS#11 als gemeinsame API verwenden. Um die Funktionalität von IronPDF mit HSMs zu demonstrieren, wird in diesem Leitfaden ein simuliertes HSM anstelle eines physischen verwendet.

In einer Produktions- oder Live-Testumgebung sollten Sie diese Simulation nicht verwenden. Stattdessen müssen Sie Ihr eigentliches HSM verwenden.

Um diese Simulation auszuführen, müssen Sie zuerst SoftHSM , OpenSSL und OpenSC installieren, um den erforderlichen Schlüssel und das Token zu generieren. Weitere Informationen zur Verwendung von SoftHSM finden Sie in deren öffentlichem GitHub-Repository.

Wir beginnen damit, aus einer HTML-Zeichenkette eine PDF-Datei zu erstellen. Im folgenden Beispiel definieren wir die Pfade und Anmeldeinformationen für unser simuliertes SoftHSM. Dies beinhaltet die Angabe des absoluten Pfads zur SoftHSM .dll -Bibliotheksdatei und zur von Ihnen erstellten .crt Zertifikatsdatei.

Als nächstes geben wir den Ausgabepfad an, in diesem Fall output.pdf.

Des Weiteren definieren wir drei Zeichenketten: hsmTokenLabel , hsmPin , und hsmKeyLabel . Bei diesen Zeichenketten wird zwischen Groß- und Kleinschreibung unterschieden, und sie müssen exakt mit den Anmeldeinformationen übereinstimmen, die Sie bei der Generierung des Tokens und des Zertifikats mit SoftHSM erstellt haben. Anschließend initialisieren wir das UsbPkcs11HsmSigner Objekt, indem wir den Pfad zur SoftHSM-Bibliothek, die PIN, die Token-Bezeichnung und die Schlüsselbezeichnung als Parameter übergeben.

Zusätzlich erstellen wir ein PdfSignatureImage , um dem Dokument eine visuelle Darstellung der Signatur hinzuzufügen. Zum Schluss rufen wir SignAndSave auf, das den von uns konfigurierten hsmSigner verwendet, um das Dokument zu signieren und es im angegebenen Ausgabepfad zu speichern.

Code

:path=/static-assets/pdf/content-code-examples/how-to/signing-with-hsm.cs
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Pdfium.Signing;
using System.Drawing;

ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Testing</h1>");

// Define Paths and Credentials
string softhsmLibraryPath = @"D:\SoftHSM2\lib\softhsm2-x64.dll";
// These MUST match what you created
string hsmTokenLabel = "MyTestToken";
string hsmPin = "123456";
string hsmKeyLabel = "my-key"; // The label for the key *inside* the token

// Create the HsmSigner object.
UsbPkcs11HsmSigner hsmSigner = new UsbPkcs11HsmSigner(
    softhsmLibraryPath,
    hsmPin,
    hsmTokenLabel,
    hsmKeyLabel
);

// Create the Signature Image
string signatureImagePath = "IronSoftware.png";
PdfSignatureImage sigImage = new PdfSignatureImage(signatureImagePath, 0, new Rectangle(50, 50, 150, 150));

// Sign PDF with HSM
pdf.SignAndSave("signedWithHSM.pdf", hsmSigner);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Der UsbPkcs11HsmSigner akzeptiert zusätzlich zwei optionale Parameter, digestAlgorithm und signingAlgorithm . Standardmäßig sind sie auf SHA256 und RSA eingestellt.

Ausgabe

Nachfolgend die generierte Ausgabe. Wie Sie sehen können, wird das Signaturfeld angezeigt und bestätigt, dass es mit dem von uns generierten Zertifikat signiert ist.

Ausgabe
Ausgabe-Zertifikat

Fehlerbehebung

Sollten Sie beim Ausführen des Codebeispiels auf den unten angezeigten Fehler stoßen, befolgen Sie diese Schritte zur Fehlerbehebung, um Ihre Konfiguration zu debuggen und zu überprüfen. Dieser CKR_GENERAL_ERROR tritt häufig auf, wenn das Programm die SoftHSM-Konfigurationsdatei nicht finden kann oder wenn die .NET-Anwendung als 32-Bit-Prozess ausgeführt wird, während die SoftHSM-Bibliothek 64-Bit ist.

Allgemeiner CKS-Fehler

Änderung des Plattformziels

Eine häufige Ursache für diesen Fehler ist eine Architekturinkompatibilität. Ihre C#-Anwendung muss als 64-Bit-Prozess ausgeführt werden, um mit der 64-Bit-SoftHSM-Bibliothek (softhsm2-x64.dll) kompatibel zu sein. Ändern Sie in den Eigenschaften Ihres Visual Studio-Projekts das Plattformziel von "Beliebige CPU" oder "x86" auf "x64", um die Kompatibilität sicherzustellen.

Plattform Ziel

Festlegen der Umgebungsvariablen

Eine weitere häufige Fehlerursache ist, dass das Programm die .conf Datei in SoftHSM nicht finden kann. Sie müssen der Bibliothek mitteilen, wo sie suchen soll, indem Sie eine systemweite Umgebungsvariable festlegen. Erstellen Sie eine neue Variable namens SOFTHSM2_CONF und setzen Sie ihren Wert auf den vollständigen Pfad Ihrer Konfigurationsdatei (z. B. D:\SoftHSM2\etc\softhsm2.conf). Vergessen Sie anschließend nicht, Visual Studio nach den Änderungen neu zu starten.

Umgebungsvariable setzen

Zusätzlich können Sie überprüfen, ob die Variable gefunden wird, indem Sie diese Zeile hinzufügen.

Console.WriteLine($"Verifying variable: {Environment.GetEnvironmentVariable("SOFTHSM2_CONF")}");
Console.WriteLine($"Verifying variable: {Environment.GetEnvironmentVariable("SOFTHSM2_CONF")}");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Wenn die Konsolenausgabe leer ist, kann das Programm die Umgebungsvariable nicht finden. Sie müssen die Einstellung vornehmen, Visual Studio oder Ihren Computer neu starten und es dann erneut versuchen.

Häufig gestellte Fragen

Was ist ein Hardware-Sicherheitsmodul (HSM) und wozu wird es zum Signieren von PDFs verwendet?

Ein Hardware-Sicherheitsmodul (HSM) ist ein physisches Gerät zur Verwaltung digitaler Schlüssel sowie zur Durchführung von Verschlüsselungs- und Entschlüsselungsfunktionen. Es wird zum Signieren von PDFs verwendet, um die Sicherheit zu erhöhen, indem es einen sicheren und mit verschiedenen Standards konformen Signaturprozess gewährleistet.

Wie kann ich ein HSM zum Signieren von PDFs in C# konfigurieren?

Um ein HSM zum Signieren von PDFs in C# zu konfigurieren, müssen Sie das HSM mit den entsprechenden Treibern und der entsprechenden Software einrichten, sicherstellen, dass es mit Ihrem System verbunden ist, und den Signierungsprozess innerhalb Ihrer C#-Anwendung mit IronPDF konfigurieren.

Welche Schritte sind nötig, um ein PDF mit IronPDF digital zu signieren?

Um ein PDF mit IronPDF digital zu signieren, müssen Sie zuerst Ihr HSM initialisieren, die digitale Signatur in Ihrem C#-Code konfigurieren und die Signatur anschließend mithilfe der Signaturfunktion von IronPDF auf das PDF-Dokument anwenden.

Kann ich IronPDF verwenden, um PDFs mit anderen Arten von digitalen Zertifikaten zu signieren?

Ja, IronPDF unterstützt das Signieren von PDFs mit verschiedenen Arten von digitalen Zertifikaten, nicht nur mit solchen, die von einem HSM verwaltet werden. Dies schließt auch Zertifikate ein, die in Software-Keystores gespeichert sind.

Welche Vorteile bietet die Verwendung von IronPDF zum Signieren von PDFs?

IronPDF bietet eine unkomplizierte API zum Signieren von PDFs und ermöglicht so die einfache Integration digitaler Signaturen in Ihre C#-Anwendungen. Es unterstützt verschiedene Zertifikatstypen, einschließlich solcher, die von HSMs verwaltet werden, und gewährleistet dadurch Flexibilität und Sicherheit.

Ist es möglich, eine mit IronPDF erstellte PDF-Signatur zu überprüfen?

Ja, sobald ein PDF mit IronPDF signiert wurde, kann die Signatur mit gängigen PDF-Readern, die digitale Signaturen unterstützen, überprüft werden, wodurch die Integrität und Authentizität des Dokuments gewährleistet wird.

Benötige ich Programmierkenntnisse, um IronPDF zum Signieren von PDFs zu verwenden?

Für die Verwendung von IronPDF zum Signieren von PDFs werden grundlegende Programmierkenntnisse in C# empfohlen, da dies das Schreiben von Code zur Verwaltung des Signierungsprozesses und zur entsprechenden Konfiguration des HSM erfordert.

Welche Unterstützung gibt es für die Integration von HSM mit IronPDF?

Iron Software stellt Dokumentation und technischen Support bereit, um Ihnen bei der Integration von HSMs mit IronPDF zu helfen und so eine reibungslose Einrichtung und den Betrieb der digitalen Signaturfunktionen zu gewährleisten.

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 16,493,056 | Version: 2025.11 gerade veröffentlicht