Digitales Signieren von PDFs mit C# HSM

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

IronPDF ermöglicht die sichere PDF-Signierung mit Hardware-Sicherheitsmodulen (HSMs) über die PKCS#11-API, bei der die privaten Schlüssel das physische Gerät nie verlassen, und bietet damit Sicherheit auf Bankniveau für unternehmenskritische Anwendungen, die fälschungssichere digitale Signaturen erfordern.

Schnellstart: Signieren einer PDF-Datei mit HSM in C#

  1. Installieren Sie IronPDF über NuGet: Install-Package IronPdf
  2. Konfigurieren Sie Ihr HSM-Gerät (oder verwenden Sie SoftHSM zum Testen)
  3. Erstellen Sie einen UsbPkcs11HsmSigner mit Ihren HSM-Anmeldedaten:

    Nuget IconLegen Sie jetzt mit NuGet los, um PDFs zu erstellen:

    1. Installieren Sie IronPDF mit dem NuGet-Paketmanager.

      PM > Install-Package IronPdf

    2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

      var hsmSigner = new UsbPkcs11HsmSigner(libraryPath, pin, tokenLabel, keyLabel);
    3. Bereitstellen zum Testen in Ihrer Live-Umgebung

      Beginnen Sie noch heute mit der Nutzung von IronPDF in Ihrem Projekt – mit einer kostenlosen Testversion.
      arrow pointer
  4. Generieren Sie Ihr PDF und unterschreiben Sie es:
    var pdf = renderer.RenderHtmlAsPdf("<h1>Document</h1>");
    pdf.SignAndSave("signed.pdf", hsmSigner);
    var pdf = renderer.RenderHtmlAsPdf("<h1>Document</h1>");
    pdf.SignAndSave("signed.pdf", hsmSigner);
    Dim pdf = renderer.RenderHtmlAsPdf("<h1>Document</h1>")
    pdf.SignAndSave("signed.pdf", hsmSigner)
    $vbLabelText   $csharpLabel
  5. Überprüfen Sie die Signatur in Ihrem PDF-Viewer

Das Hinzufügen einer Signatur zu einem PDF-Dokument ist in vielen Anwendungen eine gängige Anforderung. Unternehmenskritische Anwendungen erfordern jedoch eine höhere Sicherheit, bei der der Schlüssel nicht manipuliert werden kann. Ein normaler Signiervorgang mit einer .pfx-Datei ist so, als hätte man einen Generalschlüssel für sein Haus. Die Anwendung lädt den Schlüssel in den Speicher, um das Dokument zu signieren. Wenn der Computer kompromittiert wird, kann der Schlüssel gestohlen werden.

Eine sicherere Alternative ist die Verwendung eines Hardware-Sicherheitsmoduls (HSM). Bei einem HSM (wie einem USB-Token) wird der private Schlüssel innerhalb des Geräts erzeugt und kann dieses nicht verlassen.

Dieser Prozess ist so, als würde man das Dokument zu einer Bank bringen. Die Anwendung gibt eine PIN ein, und der HSM nimmt das Dokument in den Tresor, stempelt es mit dem Schlüssel und gibt das gestempelte Dokument zurück. Der Schlüssel verlässt nie den Tresor. Dies bietet zusätzliche Sicherheit, da der Schlüssel nicht kopiert oder gestohlen werden kann.

Wie signiere ich PDFs 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 Verfahren kompatibel, da sowohl die Bibliothek als auch die Standard-HSMs PKCS#11 als gemeinsame API verwenden. Zur Veranschaulichung wird in diesem Leitfaden ein simuliertes HSM anstelle eines physischen HSMs verwendet.

In Produktions- oder Live-Testumgebungen sollten Sie diese Simulation nicht verwenden. Verwenden Sie stattdessen Ihr aktuelles HSM. Für Produktionsumgebungen sollten zusätzliche PDF-Sicherheitsfunktionen wie Passwortschutz und Berechtigungen neben der HSM-Signierung für einen umfassenden Dokumentenschutz implementiert werden.

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 Nutzung von SoftHSM finden Sie in deren öffentlichem GitHub-Repository.

Bevor Sie die HSM-Signierung implementieren, müssen Sie sicherstellen, dass Sie IronPDF ordnungsgemäß installiert und Ihren Lizenzschlüssel für den Produktionseinsatz konfiguriert haben.

Beginnen Sie mit der Erstellung einer PDF-Datei aus einem HTML-String. 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 Sie den Ausgabepfad an, der in diesem Fall output.pdf lautet.

Definieren Sie 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. Initialisieren Sie anschließend das UsbPkcs11HsmSigner-Objekt und übergeben Sie den Pfad zur SoftHSM-Bibliothek, die PIN, das Token-Label und das Key-Label als Parameter.

Erstellen Sie außerdem ein PdfSignatureImage, um dem Dokument eine visuelle Darstellung der Signatur hinzuzufügen. Rufen Sie schließlich SignAndSave auf, das den hsmSigner verwendet, um das Dokument zu signieren und es im angegebenen Ausgabepfad zu speichern.

Wie sieht der HSM-Signiercode aus?

: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);
Imports IronPdf
Imports IronPdf.Signing
Imports IronSoftware.Pdfium.Signing
Imports System.Drawing

Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Testing</h1>")

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

' Create the HsmSigner object.
Dim hsmSigner As New UsbPkcs11HsmSigner(softhsmLibraryPath, hsmPin, hsmTokenLabel, hsmKeyLabel)

' Create the Signature Image
Dim signatureImagePath As String = "IronSoftware.png"
Dim sigImage As New PdfSignatureImage(signatureImagePath, 0, New Rectangle(50, 50, 150, 150))

' Sign PDF with HSM
pdf.SignAndSave("signedWithHSM.pdf", hsmSigner)
$vbLabelText   $csharpLabel

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

Arbeiten mit verschiedenen HSM-Konfigurationen

Verschiedene HSM-Geräte können spezifische Konfigurationen erfordern. Hier ist ein Beispiel, das zeigt, wie man den Signierer mit benutzerdefinierten Algorithmen konfiguriert und mehrere Signaturen handhabt:

// Configure with custom algorithms
var customHsmSigner = new UsbPkcs11HsmSigner(
    hsmLibraryPath,
    hsmPin,
    hsmTokenLabel,
    hsmKeyLabel,
    digestAlgorithm: IronPdf.Signing.DigestAlgorithm.SHA512,
    signingAlgorithm: IronPdf.Signing.SigningAlgorithm.RSA
);

// Apply signature with custom location and reason
var signatureOptions = new SignatureOptions
{
    SignerName = "Corporate Signing Authority",
    Location = "Company Headquarters",
    Reason = "Contract Approval"
};

// Load existing PDF for signing
var existingPdf = PdfDocument.FromFile("contract.pdf");
existingPdf.SignAndSave("contract-signed.pdf", customHsmSigner, signatureOptions);
// Configure with custom algorithms
var customHsmSigner = new UsbPkcs11HsmSigner(
    hsmLibraryPath,
    hsmPin,
    hsmTokenLabel,
    hsmKeyLabel,
    digestAlgorithm: IronPdf.Signing.DigestAlgorithm.SHA512,
    signingAlgorithm: IronPdf.Signing.SigningAlgorithm.RSA
);

// Apply signature with custom location and reason
var signatureOptions = new SignatureOptions
{
    SignerName = "Corporate Signing Authority",
    Location = "Company Headquarters",
    Reason = "Contract Approval"
};

// Load existing PDF for signing
var existingPdf = PdfDocument.FromFile("contract.pdf");
existingPdf.SignAndSave("contract-signed.pdf", customHsmSigner, signatureOptions);
Imports IronPdf

' Configure with custom algorithms
Dim customHsmSigner As New UsbPkcs11HsmSigner(
    hsmLibraryPath,
    hsmPin,
    hsmTokenLabel,
    hsmKeyLabel,
    digestAlgorithm:=IronPdf.Signing.DigestAlgorithm.SHA512,
    signingAlgorithm:=IronPdf.Signing.SigningAlgorithm.RSA
)

' Apply signature with custom location and reason
Dim signatureOptions As New SignatureOptions With {
    .SignerName = "Corporate Signing Authority",
    .Location = "Company Headquarters",
    .Reason = "Contract Approval"
}

' Load existing PDF for signing
Dim existingPdf As PdfDocument = PdfDocument.FromFile("contract.pdf")
existingPdf.SignAndSave("contract-signed.pdf", customHsmSigner, signatureOptions)
$vbLabelText   $csharpLabel

Dieser Ansatz ist besonders nützlich, wenn Sie mit Beispielen für digitale Signaturen arbeiten, die bestimmte Konformitätsstandards erfordern, oder wenn Sie Metadaten hinzufügen müssen, um Signaturdetails zu verfolgen.

Was sind häufige Probleme bei der HSM-Konfiguration?

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. Weitere Unterstützung bei Problemen mit digitalen Signaturen finden Sie in unserem Leitfaden zur Fehlerbehebung bei digitalen Signaturen.

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.

PKCS#11 HSM-Initialisierungsfehler mit CHR_GENERAL_ERROR in der Konsolenausgabe mit vollständigem Stack-Trace

Das Plattformziel ändern

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

Visual Studio-Build-Konfiguration mit Plattformziel auf x64-Architektur mit bedingten Kompilierungssymbolen

Einstellung der Umgebungsvariable

Eine weitere häufige Ursache 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). Denken Sie daran, Visual Studio nach den Änderungen neu zu starten.

Windows-Dialogfeld Systemvariablen mit hervorgehobener Umgebungsvariable SOFTISM2_CONF, die den HSM-Konfigurationspfad zeigt

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

Console.WriteLine($"Verifying variable: {Environment.GetEnvironmentVariable("SOFTHSM2_CONF")}");
Console.WriteLine($"Verifying variable: {Environment.GetEnvironmentVariable("SOFTHSM2_CONF")}");
Console.WriteLine($"Verifying variable: {Environment.GetEnvironmentVariable(""SOFTHSM2_CONF"")}")
$vbLabelText   $csharpLabel

Wenn die Konsolenausgabe leer bleibt, 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.

Best Practices für die produktive HSM-Bereitstellung

Wenn Sie HSM-signierte PDF-Dateien in Produktionsumgebungen einsetzen, sollten Sie diese zusätzlichen Sicherheitsmaßnahmen berücksichtigen:

  1. Audit Logging: Implementierung einer umfassenden Protokollierung für alle HSM-Vorgänge, um die Einhaltung von Vorschriften zu gewährleisten und den Zugriff zu verfolgen
  2. Zertifikatsverwaltung: Regelmäßige Aktualisierung und Rotation von Zertifikaten gemäß den Sicherheitsrichtlinien Ihres Unternehmens
  3. Sicherungsverfahren: Einrichtung geeigneter Sicherungs- und Wiederherstellungsverfahren für HSM-Konfigurationen
  4. Performance-Optimierung: Überwachung der Signierleistung und Implementierung von Caching-Strategien für häufig verwendete Zertifikate

Diese Praktiken ergänzen den standardmäßigen PDF-Signatur-Workflow und stellen sicher, dass Ihre Infrastruktur für die Dokumentensicherheit stabil und konform mit den Branchenstandards bleibt.

Häufig gestellte Fragen

Was ist HSM-Signierung und wie unterscheidet sie sich von der normalen PDF-Signierung?

Die HSM-Signierung (Hardware Security Module) mit IronPDF bietet Sicherheit auf Bankniveau, wobei die privaten Schlüssel das physische Gerät nicht verlassen. Im Gegensatz zur normalen .pfx-Datei-Signierung, bei der die Schlüssel in den Speicher geladen werden und bei einem Angriff auf den Computer kompromittiert werden können, bleibt der private Schlüssel bei der HSM-Signierung im Hardware-Gerät eingeschlossen, so dass er weder kopiert noch gestohlen werden kann.

Wie konfiguriere ich die HSM-Signierung in C# für PDFs?

Um die HSM-Signierung mit IronPDF zu konfigurieren, installieren Sie zunächst die Bibliothek über NuGet mit "Install-Package IronPdf" und erstellen dann ein UsbPkcs11HsmSigner-Objekt mit Ihren HSM-Anmeldedaten, einschließlich des Bibliothekspfads, der PIN, des Token-Labels und des Schlüssel-Labels. Verwenden Sie schließlich die SignAndSave-Methode, um Ihr PDF-Dokument zu signieren.

Welche Sicherheitsvorteile bietet die Verwendung von HSM für PDF-Signaturen?

Die Verwendung von HSM mit IronPDF bietet fälschungssichere digitale Signaturen, die sich ideal für unternehmenskritische Anwendungen eignen. Der Prozess ist vergleichbar mit der Übergabe von Dokumenten an einen Banktresor - die Anwendung gibt eine PIN ein, das HSM signiert das Dokument intern und sendet das signierte Dokument zurück, ohne den privaten Schlüssel preiszugeben, so dass dieser nicht kopiert oder gestohlen werden kann.

Kann ich die HSM-Signierung ohne ein physisches Gerät testen?

Ja, IronPDF ermöglicht es Ihnen, die HSM-Signierung mithilfe von Bibliotheken wie SoftHSM für Entwicklungs- und Testzwecke zu simulieren. Für Produktionsumgebungen müssen Sie jedoch ein tatsächliches physisches HSM-Gerät verwenden, um eine angemessene Sicherheit zu gewährleisten.

Welchen API-Standard verwendet IronPDF für die HSM-Kommunikation?

IronPDF verwendet den PKCS#11-API-Standard für die HSM-Kommunikation und gewährleistet so die Kompatibilität mit Standard-HSM-Geräten. Diese gemeinsame API ermöglicht IronPDF die nahtlose Interaktion mit verschiedenen HSM-Hardware-Tokens und Sicherheitsmodulen.

Wie kann ich überprüfen, ob meine PDF-Datei erfolgreich mit HSM signiert wurde?

Nachdem Sie eine PDF-Datei mit der HSM-Funktion von IronPDF signiert haben, können Sie die Signatur überprüfen, indem Sie die signierte PDF-Datei in einem beliebigen Standard-PDF-Viewer öffnen. Der Viewer zeigt die digitalen Signaturinformationen an und bestätigt die Authentizität und Integrität des Dokuments.

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 17,386,124 | Version: 2026.2 gerade veröffentlicht