Comment signer numériquement des PDF avec C# en utilisant HSM

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

L'ajout d'une signature à un document PDF est une exigence courante dans de nombreuses applications. Cependant, les applications critiques nécessitent un niveau de sécurité plus élevé où la clé elle-même ne peut pas être altérée. Une opération de signature normale avec un fichier .pfx est comparable à la possession d'une clé passe-partout à la maison. L'application doit charger la clé dans la mémoire de votre ordinateur pour signer le document. Si l'ordinateur lui-même est compromis, la clé peut être volée.

Une alternative bien plus sûre consiste à utiliser un Hardware Security Module (HSM) . Avec un HSM (comme votre jeton USB), la clé privée est générée à l'intérieur de l'appareil et ne peut physiquement jamais en sortir.

Ce processus est comparable au dépôt du document à la banque. L'application fournit un code PIN, et le " responsable de la banque " (le HSM) prend le document dans le coffre-fort, le tamponne avec la clé et le rend. L'essentiel est que la clé ne quitte jamais le coffre-fort. Cela offre une mesure de sécurité supplémentaire, car la clé ne peut être ni copiée ni volée.

Commencez à utiliser IronPDF dans votre projet aujourd'hui avec un essai gratuit.

Première étape :
green arrow pointer

Signature avec un HSM

La signature avec un HSM nécessite généralement un périphérique physique, tel qu'un jeton USB, avec lequel l'application interagit. IronPDF est entièrement compatible avec ces opérations, car la bibliothèque et les HSM standard utilisent souvent PKCS#11 comme API commune. À des fins de démonstration concernant la fonctionnalité d'IronPDF avec les HSM, ce guide utilisera un HSM simulé au lieu d'un HSM physique.

Dans un environnement de production ou de test en direct, vous ne devez pas utiliser cette simulation. Vous devez plutôt utiliser votre HSM réel.

Pour exécuter cette simulation, vous devez d'abord installer SoftHSM , OpenSSL et OpenSC afin de générer la clé et le jeton nécessaires. Pour plus d'informations sur l'utilisation de SoftHSM, veuillez consulter leur dépôt GitHub public.

Nous allons commencer par créer un PDF à partir d'une chaîne HTML. Dans l'exemple ci-dessous, nous définissons les chemins d'accès et les informations d'identification de notre SoftHSM simulé. Cela inclut de fournir le chemin d'accès absolu au fichier de bibliothèque SoftHSM .dll et au fichier de certificat .crt que vous avez créé.

Ensuite, nous spécifions le chemin de sortie, qui dans ce cas est output.pdf.

De plus, nous définissons trois chaînes : hsmTokenLabel , hsmPin et hsmKeyLabel . Ces chaînes de caractères sont sensibles à la casse et doivent correspondre exactement aux informations d'identification que vous avez créées lors de la génération du jeton et du certificat avec SoftHSM. Ensuite, nous initialisons l'objet UsbPkcs11HsmSigner en passant comme paramètres le chemin de la bibliothèque SoftHSM, le code PIN, l'étiquette du jeton et l'étiquette de la clé.

Nous créons en outre une PdfSignatureImage pour ajouter une représentation visuelle de la signature sur le document. Enfin, nous appelons SignAndSave , qui utilise le hsmSigner que nous avons configuré pour signer le document et l'enregistrer dans le chemin de sortie spécifié.

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

Le UsbPkcs11HsmSigner accepte en outre deux paramètres optionnels : digestAlgorithm et signingAlgorithm . Par défaut, ils sont configurés sur SHA256 et RSA .

Sortie

Voici le résultat généré. Comme vous pouvez le constater, le champ de signature s'affiche et confirme que la signature est effectuée avec le certificat que nous avons généré.

Sortie
Certificat de production

Dépannage

Si vous rencontrez l'erreur affichée ci-dessous lors de l'exécution de l'exemple de code, suivez ces étapes de dépannage pour déboguer et vérifier votre configuration. Cette erreur CKR_GENERAL_ERROR se produit généralement lorsque le programme ne trouve pas le fichier de configuration SoftHSM ou lorsque l'application .NET s'exécute en tant que processus 32 bits alors que la bibliothèque SoftHSM est en 64 bits.

Erreur générale de CKS

Modification de la cible de la plateforme

Une cause fréquente de cette erreur est une incompatibilité d'architecture. Votre application C# doit s'exécuter en tant que processus 64 bits pour correspondre à la bibliothèque SoftHSM 64 bits (softhsm2-x64.dll). Dans les propriétés de votre projet Visual Studio, modifiez la plateforme cible de " Any CPU " ou " x86 " à " x64 " pour garantir la compatibilité.

Plateforme cible

Définition de la variable d'environnement

Une autre cause d'erreur fréquente est que le programme ne trouve pas le fichier .conf dans SoftHSM. Vous devez indiquer à la bibliothèque où chercher en définissant une variable d'environnement système. Créez une nouvelle variable nommée SOFTHSM2_CONF et définissez sa valeur sur le chemin complet de votre fichier de configuration (par exemple, D:\SoftHSM2\etc\softhsm2.conf). N'oubliez pas ensuite de redémarrer Visual Studio après avoir effectué les modifications.

Définir une variable d'environnement

De plus, vous pouvez vérifier si la variable est trouvée en ajoutant cette ligne.

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

Si la sortie de la console est vide, cela signifie que le programme ne trouve pas la variable d'environnement. Vous devez le configurer, redémarrer Visual Studio ou votre ordinateur, puis réessayer.

Questions Fréquemment Posées

Qu'est-ce qu'un module de sécurité matériel (HSM) et pourquoi est-il utilisé pour la signature des fichiers PDF ?

Un module de sécurité matériel (HSM) est un dispositif physique utilisé pour gérer les clés numériques et effectuer des opérations de chiffrement et de déchiffrement. Il sert à signer les fichiers PDF afin d'en renforcer la sécurité en garantissant que le processus de signature est à la fois sécurisé et conforme aux différentes normes.

Comment configurer un HSM pour la signature de fichiers PDF en C# ?

Pour configurer un HSM pour la signature de PDF en C#, vous devez configurer le HSM avec les pilotes et logiciels appropriés, vous assurer qu'il est connecté à votre système et configurer le processus de signature dans votre application C# à l'aide d'IronPDF.

Quelles sont les étapes pour signer numériquement un PDF avec IronPDF ?

Pour signer numériquement un PDF à l'aide d'IronPDF, vous devez d'abord initialiser votre HSM, configurer la signature numérique dans votre code C# et appliquer la signature au document PDF à l'aide de la fonctionnalité de signature d'IronPDF.

Puis-je utiliser IronPDF pour signer des PDF avec d'autres types de certificats numériques ?

Oui, IronPDF prend en charge la signature des fichiers PDF avec différents types de certificats numériques, et pas seulement ceux gérés par un HSM. Cela inclut les certificats stockés dans des gestionnaires de clés logiciels.

Quels sont les avantages de l'utilisation d'IronPDF pour la signature de fichiers PDF ?

IronPDF propose une API simple pour la signature de fichiers PDF, permettant d'intégrer facilement des signatures numériques à vos applications C#. Elle prend en charge différents types de certificats, y compris ceux gérés par les HSM, garantissant ainsi flexibilité et sécurité.

Est-il possible de vérifier une signature PDF créée avec IronPDF ?

Oui, une fois qu'un PDF est signé à l'aide d'IronPDF, la signature peut être vérifiée à l'aide de lecteurs PDF standard prenant en charge les signatures numériques, garantissant ainsi l'intégrité et l'authenticité du document.

Ai-je besoin de connaissances en programmation pour utiliser IronPDF afin de signer des fichiers PDF ?

Il est recommandé d'avoir des connaissances de base en programmation C# pour utiliser IronPDF afin de signer des fichiers PDF, car cela implique d'écrire du code pour gérer le processus de signature et configurer le HSM de manière appropriée.

Quel type de support est disponible pour l'intégration de HSM avec IronPDF ?

Iron Software fournit la documentation et le support technique nécessaires pour vous aider à intégrer les HSM à IronPDF, garantissant ainsi une configuration et un fonctionnement fluides des fonctionnalités de signature numérique.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Prêt à commencer?
Nuget Téléchargements 16,493,056 | Version: 2025.11 vient de sortir