IRONSOFTWAREHOME

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

Curtis Chau
Curtis Chau
Updated: 2026年6月4日

IronPDFは、PKCS#11 APIを通じてハードウェアセキュリティモジュール(HSM)を使用したセキュアなPDF署名を可能にし、秘密鍵が物理デバイスから離れることがないため、改ざん防止された電子署名を必要とするミッションクリティカルなアプリケーションに銀行レベルのセキュリティを提供します。

クイックスタート: C# で HSM を使用して PDF に署名する
  1. NuGet 経由で IronPDF をインストールする: Install-Package IronPdf 2.HSMデバイスを設定する(またはテスト用にSoftHSMを使用する)

  2. HSMの認証情報を使用してUsbPkcs11HsmSignerを作成してください:

    1. 1Install IronPDF with NuGet Package Manager

      PM > Install-Package IronPdf

    2. 2このコード スニペットをコピーして実行します。

      var hsmSigner = new UsbPkcs11HsmSigner(libraryPath, pin, tokenLabel, keyLabel);
      C#
    3. 3実際の環境でテストするためにデプロイする

      今日プロジェクトで IronPDF を使い始めましょう無料トライアル
      arrow pointer

4.PDFを作成し、署名してください:

var pdf = renderer.RenderHtmlAsPdf("<h1>Document</h1>");
pdf.SignAndSave("signed.pdf", hsmSigner);

5.PDFビューアで署名を確認する

PDF ドキュメントに署名を追加することは、多くのアプリケーションで共通の要件です。 しかし、ミッション・クリティカルなアプリケーションでは、キーが改ざんできない高いセキュリティが要求されます。 .pfx ファイルを使用した通常の署名操作は、自宅にマスターキーを持っているようなものです。 アプリケーションは、文書に署名するためにキーをメモリにロードします。 コンピュータが危険にさらされた場合、キーが盗まれる可能性があります。

より安全な代替手段は、ハードウェア・セキュリティ・モジュール(HSM)を使用することです。 HSM(USBトークンのようなもの)では、秘密鍵はデバイス内部で生成され、デバイスから離れることはできません。

このプロセスは、銀行に文書を持ち込むようなものです。 アプリケーションはPINを提供し、HSMは文書を金庫に持ち込み、キーでスタンプを押してスタンプを押された文書を返します。 鍵は金庫から出ません。 これは、キーがコピーされたり盗まれたりすることがないため、さらなるセキュリティを提供します。

HSMでPDFに署名するには?

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

本番環境やライブテスト環境では、このシミュレーションを使用しないでください。 代わりに、実際のHSMを使用してください。 本番環境では、包括的なドキュメント保護のために、パスワード保護とアクセス許可などの追加のPDFセキュリティ機能をIronPDF署名と一緒に実装することを検討してください。

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

HSM署名を実装する前に、IronPDFを正しくインストールし、ライセンスキーを本番用に設定していることを確認してください。

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

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

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

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

HSM署名コードはどのように見えますか?

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);

UsbPkcs11HsmSigner はさらに、digestAlgorithm および signingAlgorithm という 2 つのオプションパラメータを受け取ります。 デフォルトでは、これらは SHA256 および RSA に設定されています。

さまざまな HSM 構成での作業

HSMデバイスによっては、特定の設定が必要な場合があります。 カスタム・アルゴリズムで署名者を設定し、複数の署名を処理する方法を示す例を示します:

// 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);

このアプローチは、特定のコンプライアンス基準を必要とするデジタル署名の例を扱う場合や、署名の詳細を追跡するためにメタデータを追加する必要がある場合に特に役立ちます。

私のお気に入りのこの種のライブラリはIronPDFです。PDFファイルの迅速で効率的な操作が可能です。また、PDF/A形式へのエクスポートやPDF文書へのデジタル署名といった多くの貴重な機能も備えています。

Milan Jovanovic

Microsoft MVP

ケーススタディを見る

IronOCRのおかげで私たちは年間$40,000を手作業の処理から節約し、生産性を向上させ、高影響のタスクにリソースを充てることができます。非常にお勧めします。

Brent Matzelle

最高技術責任者, OPYN

ケーススタディを見る

IronSuiteは私たちの業務において重要な役割を果たしています。これらは、フロアプランの作成や在庫管理の改善を含め、ビジネス全体の効率を向上させるツールです。

David Jones

リードソフトウェアエンジニア、Agorus Build

ケーススタディを見る

よくある HSM 設定の問題とは

コード例の実行中に以下に示すエラーが発生した場合は、次のトラブルシューティング手順に従って構成をデバッグおよび検証してください。 デジタル署名に関するその他の問題については、デジタル署名トラブルシューティングガイドを参照してください。

この CKR_GENERAL_ERROR は、プログラムが SoftHSM 構成ファイルを見つけられない場合、または .NET アプリケーションが 32 ビットプロセスとして実行されている一方で SoftHSM ライブラリが 64 ビットである場合に、よく発生します。

PKCS#11 HSM の初期化エラーで、コンソール出力に CHR_GENERAL_ERROR が表示され、完全なスタックトレースがある

プラットフォームターゲットを変更する

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

Visual Studioのビルド構成で、プラットフォーム・ターゲットをx64アーキテクチャに設定し、条件付きコンパイル・シンボルを使用しています。

環境変数の設定

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

HSMの設定パスを示すSOFTISM2_CONF環境変数が強調表示されたWindowsのシステム変数ダイアログ

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

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

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

プロダクション HSM 展開のベストプラクティス

HSM署名されたPDFを本番環境に展開する際には、以下の追加のセキュリティ対策を考慮してください:

1.監査ロギング: コンプライアンスを維持し、アクセスを追跡するために、すべてのHSM操作に対して包括的なロギングを実装する。 2.証明書の管理:組織のセキュリティポリシーに従って、証明書を定期的に更新し、ローテーションします。 3.バックアップ手順: HSM構成の適切なバックアップとリカバリ手順を確立する。 4.パフォーマンスの最適化:署名のパフォーマンスを監視し、頻繁にアクセスされる証明書のキャッシュ戦略を実装する。

これらのプラクティスは、標準的なPDF署名ワークフローを補完し、文書セキュリティインフラストラクチャが堅牢で業界標準に準拠していることを保証します。

よくある質問

HSM署名とはどのようなもので、通常のPDF署名とどう違うのですか?

IronPDF による HSM (ハードウェアセキュリティモジュール) 署名は銀行レベルのセキュリティを提供し、秘密鍵が物理デバイスから離れることはありません。通常の.pfxファイルへの署名では、秘密鍵はメモリにロードされ、コンピュータが攻撃された場合に危険にさらされる可能性がありますが、HSM署名では秘密鍵はハードウェアデバイス内にロックされるため、コピーや盗用は不可能です。

C#でPDFのHSM署名を設定するには?

IronPDFでHSM署名を設定するには、まず'Install-Package IronPDF'でNuGet経由でライブラリをインストールし、ライブラリパス、PIN、トークン・ラベル、キー・ラベルを含むHSM認証情報でUsbPkcs11HsmSignerオブジェクトを作成します。最後に、SignAndSaveメソッドを使用してPDFドキュメントに署名します。

PDF署名にHSMを使用するセキュリティ上の利点は何ですか?

IronPDFでHSMを使用することで、ミッションクリティカルなアプリケーションに理想的な改ざん防止の電子署名を提供します。アプリケーションはPINを提供し、HSMは内部で文書に署名し、秘密鍵を公開することなく署名された文書を返します。

物理的なデバイスなしでHSM署名をテストできますか?

はい、IronPDFでは開発やテストの目的でSoftHSMのようなライブラリを使用してHSM署名をシミュレートすることができます。しかし本番環境では、適切なセキュリティを確保するために実際の物理的なHSMデバイスを使用する必要があります。

IronPDFはHSM通信にどのようなAPI標準を使用していますか?

IronPDFはHSM通信にPKCS#11 API標準を使用し、標準的なHSMデバイスとの互換性を確保しています。この共通APIにより、IronPDFは様々なHSMハードウェアトークンやセキュリティモジュールとシームレスにやり取りすることができます。

PDFがHSMで正常に署名されたことを確認するにはどうすればよいですか?

IronPDFのHSM機能でPDFに署名した後、標準的なPDFビューアで署名されたPDFを開くことで署名を検証することができます。ビューアはデジタル署名情報を表示し、文書の信頼性と完全性を確認します。

How do I add a trusted timestamp to an HSM-signed PDF?

Set the TimeStampUrl property on the signer to the endpoint of an RFC 3161 Time Stamp Authority before calling SignAndSave. The endpoint is supplied as a string, and the resulting signature carries a timestamp token that readers such as Adobe Acrobat recognize. Leaving the property null or empty skips timestamping entirely and makes no network call.

Which hash algorithm does the HSM timestamp use?

TimestampHashAlgorithm selects the digest requested from the timestamp authority and accepts SHA1, SHA256, or SHA512. The built-in UsbPkcs11HsmSigner defaults to SHA256 through its AHsmSigner base class. A custom signer that implements IHsmSigner directly without deriving from AHsmSigner receives the uninitialized enum value, which is SHA1, so it should set the property explicitly. Note that this is separate from the digestAlgorithm constructor parameter, which governs the signature itself rather than the timestamp.

What causes a TimestampException during HSM signing?

TimestampException is thrown when a timestamp cannot be obtained or embedded. The three causes are an unreachable Time Stamp Authority, an authority that returns an empty token, and a timestamped signature that does not fit the reserved signature space, which can happen when a TSA returns a very large certificate chain. The exception message states the actual size against the reserved size.

Curtis Chau
テクニカルライター

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

...
詳しく読む

準備はできましたか?

Nuget Downloads 20,809,720バージョン:2026.9リリースされたばかり

あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。
PDF用C# NuGetライブラリ
NuGetでインストール

バージョン: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. ソリューションエクスプローラーで参照を右クリックし、NuGetパッケージを管理を選択
  2. ブラウズを選択し、"IronPDF"を検索
  3. パッケージを選択してインストール
C# PDF DLL
DLLをダウンロード

バージョン: 2026.9

またはここからWindowsインストーラーをダウンロードする。

  1. IronPDFを~/Libsなどの場所に解凍し、ソリューションディレクトリ内に配置する
  2. Visual Studioソリューションエクスプローラーで参照を右クリックし、"IronPDF.dll"をブラウズして選択

ライセンスは$999から

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。