HSMを使用してC#でPDFにデジタル署名する方法

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

PDF ドキュメントに署名を追加することは、多くのアプリケーションで共通の要件です。 ただし、ミッションクリティカルなアプリケーションでは、キー自体が改ざんされない、より高いレベルのセキュリティが必要です。 .pfxファイルを使用した通常の署名操作は、自宅にマスター キーがあるのと似ています。 ドキュメントに署名するには、アプリケーションがコンピューターのメモリにキーを読み込む必要があります。 コンピュータ自体が侵害された場合、キーが盗まれる可能性があります。

はるかに安全な代替手段は、 Hardware Security Module (HSM)を使用することです。 HSM (USB トークンなど) では、秘密鍵はデバイス内部で生成され、物理的にデバイスから外に出ることはできません。

このプロセスは、書類を銀行に持ち込むのに似ています。 アプリケーションは PIN を提供し、"銀行支店長"(HSM) が文書を金庫に持ち込み、キーでスタンプを押して、スタンプを押した文書を返します。 重要な点は、鍵が金庫から外に出ないということです。 これにより、キーがコピーされたり盗まれたりすることがなくなるため、セキュリティがさらに強化されます。

今日あなたのプロジェクトでIronPDFを無料トライアルで使用開始。

最初のステップ:
green arrow pointer

HSMによる署名

HSM を使用して署名するには、通常、アプリケーションが対話する USB トークンなどの物理デバイスが必要です。 ライブラリと標準 HSM の両方が共通 API としてPKCS#11使用することが多いため、IronPDF はこれらの操作と完全に互換性があります。 IronPDF の HSM 機能に関するデモンストレーションを目的として、このガイドでは物理的な HSM ではなくシミュレートされた HSM を使用します。

実稼働環境またはライブテスト環境では、このシミュレーションを使用しないでください。 代わりに、実際の HSM を使用する必要があります。

このシミュレーションを実行するには、まずSoftHSMOpenSSLOpenSCをインストールして、必要なキーとトークンを生成する必要があります。 SoftHSM の利用方法の詳細については、公開されている GitHub リポジトリを参照してください。

まず、HTML 文字列から PDF を作成します。 以下の例では、シミュレートされた SoftHSM のパスと資格情報を定義します。 これには、作成した SoftHSM .dllライブラリ ファイルと.crt証明書ファイルへの絶対パスの提供が含まれます。

次に、出力パスを指定します。この例では output.pdf です。

さらに、 hsmTokenLabelhsmPinhsmKeyLabelの 3 つの文字列を定義します。 これらの文字列は大文字と小文字が区別され、SoftHSM でトークンと証明書を生成するときに作成した資格情報と完全に一致する必要があります。 その後、UsbPkcs11HsmSignerオブジェクトを初期化し、SoftHSMライブラリパス、PIN、トークンラベル、キーラベルを渡します。

さらに、 PdfSignatureImageを作成して、署名の視覚的な表現をドキュメントに追加します。 最後に、 SignAndSaveを呼び出します。これは、設定した hsmSigner を使用してドキュメントに署名し、指定された出力パスに保存します。

コード

: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

UsbPkcs11HsmSigner 、さらに、 digestAlgorithmsigningAlgorithmという 2 つのオプション パラメータを取ります。 デフォルトでは、 SHA256RSAに設定されています。

出力

以下は生成された出力です。 ご覧のとおり、署名フィールドが表示され、生成した証明書で署名されていることが確認されます。

出力
出力証明書

トラブルシューティング

コード例の実行中に以下に示すエラーが発生した場合は、次のトラブルシューティング手順に従って構成をデバッグおよび検証してください。 この CKR_GENERAL_ERROR は、プログラムが SoftHSM 構成ファイルを見つけられない場合、または SoftHSM ライブラリが 64 ビットであるのに .NET アプリケーションが 32 ビット プロセスとして実行されている場合によく発生します。

一般的なCKSのエラー

プラットフォームターゲットの変更

このエラーの一般的な原因は、アーキテクチャの不一致です。 C# アプリケーションは、64 ビット SoftHSM ライブラリ (softhsm2-x64.dll) と一致するように 64 ビット プロセスとして実行する必要があります。 Visual Studio プロジェクトのプロパティで、プラットフォーム ターゲットを"任意の CPU"または"x86"から"x64"に変更して互換性を確保します。

プラットフォームターゲット

環境変数の設定

エラーのもう 1 つの一般的な原因は、プログラムが SoftHSM 内の.confファイルを見つけられないことです。 システム全体の環境変数を設定して、ライブラリに検索場所を指示する必要があります。 SOFTHSM2_CONFという名前の新しい変数を作成し、その値を構成ファイルの完全パス (例: D:\SoftHSM2\etc\softhsm2.conf) に設定します。 その後、変更を加えたら必ず Visual Studio を再起動してください。

環境変数の設定

さらに、この行を追加することで、変数が見つかるかどうかを確認できます。

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

コンソール出力が空白を返す場合、プログラムは環境変数を見つけることができません。 設定し、Visual Studio またはコンピューターを再起動して、再試行する必要があります。

よくある質問

ハードウェア セキュリティ モジュール (HSM) とは何ですか? また、なぜ PDF の署名に使用されるのですか?

ハードウェアセキュリティモジュール(HSM)は、デジタルキーの管理と暗号化・復号化機能を実行するために使用される物理デバイスです。PDFへの署名に使用され、署名プロセスの安全性と様々な標準への準拠を確保することで、セキュリティを強化します。

C# で PDF に署名するための HSM を構成するにはどうすればよいですか?

C# で PDF に署名するために HSM を構成するには、適切なドライバーとソフトウェアを使用して HSM を設定し、システムに接続されていることを確認し、IronPDF を使用して C# アプリケーション内で署名プロセスを構成する必要があります。

IronPDF を使用して PDF にデジタル署名するには、どのような手順が必要ですか?

IronPDF を使用して PDF にデジタル署名するには、まず HSM を初期化し、C# コード内でデジタル署名を構成し、IronPDF の署名機能を使用して PDF ドキュメントに署名を適用する必要があります。

IronPDF を使用して、他の種類のデジタル証明書で PDF に署名できますか?

はい、IronPDF は HSM で管理されている証明書だけでなく、さまざまな種類のデジタル証明書による PDF 署名をサポートしています。これには、ソフトウェアキーストアに保存されている証明書も含まれます。

PDF 署名に IronPDF を使用する利点は何ですか?

IronPDFは、PDF署名用の分かりやすいAPIを提供しており、C#アプリケーションにデジタル署名を簡単に統合できます。HSMで管理されるものも含め、様々な証明書タイプをサポートし、柔軟性とセキュリティを確保します。

IronPDF で作成された PDF 署名を検証することは可能ですか?

はい、IronPDF を使用して PDF に署名すると、デジタル署名をサポートする標準の PDF リーダーを使用して署名を検証できるため、ドキュメントの整合性と信頼性が保証されます。

IronPDF を使用して PDF に署名するには、プログラミング経験が必要ですか?

IronPDF を使用して PDF に署名するには、署名プロセスを管理し、HSM を適切に構成するためのコードを記述する必要があるため、C# の基本的なプログラミング知識があることが推奨されます。

HSM と IronPDF を統合する場合、どのようなサポートが受けられますか?

Iron Software は、HSM と IronPDF を統合し、デジタル署名機能のスムーズなセットアップと操作を保証するためのドキュメントと技術サポートを提供します。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

準備はできましたか?
Nuget ダウンロード 16,493,056 | Version: 2025.11 リリース