IRONSOFTWAREHOME
IRONPDFの使用

Telerik Blazor PDF ビューアの機能でアプリを強化

Curtis Chau
Curtis Chau
Updated: 2026年7月5日

ASP.NET Coreで PDF にデジタル署名を追加すると、ドキュメントの整合性が保護され、署名者の ID が確認され、ほとんどの管轄区域でファイルが法的に防御可能になります。 IronPDFを使用すると、数行の C# コードで、証明書ファイルを使用してサーバー側で PDF に署名したり、目に見える署名画像を追加したり、インタラクティブな署名フォーム フィールドを埋め込んだりすることができます。

ライブラリをNuGetからインストールし、.pfx証明書を取得し、下記の例に従ってプロダクション対応の文書署名ワークフローを構築してください。

PM > Install-Package IronPdf

Visual Studio 内のNuGetパッケージ マネージャーを使用してインストールすることも、 IronPDF製品ページから直接ダウンロードすることもできます。 無料トライアルを開始して、すべての署名機能を一切の義務なしにお試しください。

PDF デジタル署名とは何ですか? なぜ重要なのですか?

デジタル署名は、署名者の ID を文書の特定のバージョンに結び付ける暗号化メカニズムです。 これは、公開鍵暗号を使用して検証可能で改ざん防止機能のあるシールを作成するため、入力した名前やスキャンした画像などの単純な電子署名とは異なります。

誰かが PDF にデジタル署名すると、署名ソフトウェアはドキュメントの内容のハッシュを生成し、そのハッシュを署名者の秘密鍵で暗号化します。 生成された署名は、署名者の公開証明書とともに PDF に埋め込まれます。 Adobe Acrobat Reader や最近のブラウザに組み込まれている PDF ビューアなど、デジタル署名をサポートする PDF リーダーであれば、公開キーを使用してハッシュを復号化し、それを文書の新しく計算されたハッシュと比較することができます。 ハッシュが一致する場合、文書は本物であり、変更されていないことになります。

デジタル署名が法的に重要な理由

ほとんどの国では、デジタル署名された文書は手書きの紙の契約書と同じ法的効力を持ちます。 欧州連合のeIDAS 規制と米国のESIGN 法はどちらも、特定の条件が満たされた場合に電子署名を法的拘束力のあるものとして認めています。 証明書ベースのデジタル署名は、これらの要件の最も強力な層を満たします。

ASP.NET Coreにおけるデジタル署名の位置づけ

ASP.NET Coreアプリケーション内のサーバー側署名を使用すると、処理中にドキュメントに自動的に署名できます。クライアント ソフトウェアは必要ありません。 契約書、請求書、コンプライアンス レポート、NDA はすべて生成された瞬間に署名でき、署名されたファイルはユーザーに直接返したり、ドキュメント管理システムに保存したりできます。 IronPDF は、HTML から PDF へのレンダリングから暗号署名までのパイプライン全体を処理するため、低レベルの PDF 仕様の詳細に触れることなくワークフローを実装できます。

ASP.NET CoreプロジェクトにIronPDFをインストールするにはどうすればよいでしょうか?

動作する署名環境への最も速いパスは、 NuGetパッケージです。 Visual StudioでPackage Manager Consoleを開き、実行してください:

PM > Install-Package IronPdf

あるいはSolution Explorerでプロジェクトを右クリックし、"Manage NuGet Packages"を選択し、IronPdfを検索して、インストールをクリックしてください。 インストール後、次のusingディレクティブをコントローラまたはサービスクラスの先頭に追加してください。

using IronPdf;
using IronPdf.Signing;

IronPDF は.NET 8 および.NET 9/10 をターゲットにしているため、最新のASP.NET Coreプロジェクトに自然に適合します。 初回セットアップの詳細な手順については、 IronPDFクイックスタート ガイドを参照してください。

ASP.NET Coreで証明書ファイルを使用して PDF に署名するにはどうすればよいですか?

最も一般的な署名方法は.p12証明書ファイルを使用します。これらのファイルは秘密鍵と公開証明書チェーンを一つのパスワード保護されたアーカイブに束ねます。DigiCertGlobalSignなどの信頼できる認証局(CA)から取得するか、開発とテストのために自己署名証明書を生成できます。

以下の例では、HTML から PDF を生成し、証明書ベースのデジタル署名を適用します。

using IronPdf;
using IronPdf.Signing;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/sign-with-certificate", (IWebHostEnvironment env) =>
{
    // Generate a PDF from HTML content
    var renderer = new ChromePdfRenderer();
    var document = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1><p>Terms and conditions...</p>");

    // Locate the PFX certificate on the server
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");

    // Build the signature object
    var signature = new PdfSignature(certPath, "yourPassword")
    {
        SigningContact = "legal@yourcompany.com",
        SigningLocation = "Chicago, IL, USA",
        SigningReason = "Document Approval"
    };

    // Apply the signature and save
    document.Sign(signature);
    string outputPath = Path.Combine(Path.GetTempPath(), "signed-contract.pdf");
    document.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "signed-contract.pdf");
});

app.Run();

ChromePdfRendererは有効なHTML文字列またはURLをPDFに変換します。 SigningReason)はPDFビューアが署名パネルで表示するメタデータを追加します。 SaveAsが署名されたファイルをディスクに書き込みます。

署名されたファイルをメモリから返す

一時ファイルをディスクに書きたくない場合は、PDFをMemoryStreamに保存し、コントローラーアクションから直接返してください。

var stream = new MemoryStream();
document.SaveAs(stream);
stream.Position = 0;
return Results.File(stream, "application/pdf", "signed-contract.pdf");

このアプローチは、一時ファイルの管理によって不要なオーバーヘッドが追加される高スループット API に適しています。

完全なプロパティリファレンスについてはPdfSignature APIドキュメントを参照してください。

PDF に目に見える署名画像を追加するにはどうすればよいですか?

暗号署名はドキュメントの整合性を保護しますが、レンダリングされた PDF では表示されません。 多くのワークフロー、特に契約書や手紙が関係するものでは、スキャンした手書きの署名や会社の印鑑をページに印刷されたものなど、目に見える形で表現する必要もあります。

IronPDFはこれをLoadSignatureImageFromFileメソッドを通じてサポートしています。 このメソッドはイメージパス、ページインデックス、および表示される署名の位置とサイズを定義するIronSoftware.Drawing.Rectangleを受け取ります。

using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/sign-with-visible-image", (IWebHostEnvironment env) =>
{
    // Load an existing PDF (for example, an invoice template)
    string pdfPath = Path.Combine(env.ContentRootPath, "Documents", "invoice.pdf");
    var document = PdfDocument.FromFile(pdfPath);

    // Paths to the certificate and the signature image
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
    string imagePath = Path.Combine(env.ContentRootPath, "Images", "signature.png");

    // Define where the visible signature appears (x, y, width, height in points)
    var signatureArea = new Rectangle(50, 680, 200, 80);

    var signature = new PdfSignature(certPath, "yourPassword");
    signature.LoadSignatureImageFromFile(imagePath, pageIndex: 0, signatureArea);

    document.Sign(signature);
    string outputPath = Path.Combine(Path.GetTempPath(), "signed-invoice.pdf");
    document.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "signed-invoice.pdf");
});

app.Run();

可視署名画像は、指定されたページの指定された座標に合成されます。暗号署名は文書全体に同時に適用されるため、セキュリティと視覚的な確認の両方を1回の操作で実現できます。

データベースやクラウドストレージから取得した場合など、イメージがメモリ内にある場合はLoadSignatureImageFromStreamを使用してください。 ビジュアル署名オプションの詳細については、 PDF 署名ガイドを参照してください。

外部署名者用の署名フォーム フィールドを作成するにはどうすればよいですか?

一部のワークフローでは、ドキュメントはシステムによって作成されますが、顧客、パートナー、または規制機関などの外部の当事者による署名が必要です。 その団体から事前に証明書を集めるのではなく、PDF に専用の署名フォームフィールドを埋め込み、ドキュメントを送信します。 受信者は、Adobe Acrobat Reader またはその他の互換性のあるビューアで PDF を開き、署名フィールドをクリックして、独自の証明書または電子署名を適用します。

using IronPdf;
using IronPdf.Forms;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/generate-signable-form", (IWebHostEnvironment env) =>
{
    // Render the document that requires a client signature
    var renderer = new ChromePdfRenderer();
    var pdf = renderer.RenderHtmlAsPdf(@"
        <h1>Client Service Agreement</h1>
        <p>Please review the terms below and sign in the field provided.</p>
        <p>By signing, you confirm acceptance of all listed terms and conditions.</p>
    ");

    // Define the signature field: name, page, x, y, width, height (in points)
    var signatureField = new SignatureFormField(
        "ClientSignature",
        pageIndex: 0,
        x: 50,
        y: 600,
        width: 300,
        height: 100
    );

    pdf.Form.Add(signatureField);

    string outputPath = Path.Combine(Path.GetTempPath(), "client-agreement.pdf");
    pdf.SaveAs(outputPath);

    return Results.File(outputPath, "application/pdf", "client-agreement.pdf");
});

app.Run();

SignatureFormFieldコンストラクタのパラメータはフィールドのページ上の位置に直接マップされます。 受信者が PDF を開くと、署名を記入する場所が明確に区切られたボックスが表示されます。 完了したフォームはシステムに戻され、そこでロードして埋め込まれた署名を検証し、アーカイブすることができます。

PDF フォームの処理 (送信されたフォーム データの読み取りを含む) の詳細については、 PDF フォーム編集ガイドを参照してください。

デジタル署名をプログラムで検証するにはどうすればよいですか?

文書に署名して返送した後、署名がまだ有効であり、文書が変更されていないことを確認する必要がある場合があります。 IronPDFはPdfDocumentオブジェクトを通じて署名検証を公開しています。

using IronPdf;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/verify-signature", (IWebHostEnvironment env) =>
{
    string signedPath = Path.Combine(env.ContentRootPath, "Documents", "signed-contract.pdf");
    var document = PdfDocument.FromFile(signedPath);

    // Retrieve all embedded signatures
    var signatures = document.GetSignatures();

    foreach (var sig in signatures)
    {
        bool isValid = sig.VerifySignature();
        string status = isValid
            ? $"Valid -- signed by {sig.SignerName} on {sig.SigningTime:D}"
            : "INVALID -- document may have been tampered with";

        Console.WriteLine(status);
    }

    return Results.Ok(new { SignatureCount = signatures.Count });
});

app.Run();

GetSignatures()はPDFに埋め込まれたすべてのデジタル署名のリストを返します。 各VerifySignature()、署名者の名前、署名タイムスタンプ、および証明書チェーンを公開しています。 この情報は、署名が破損しているか期限切れである PDF にフラグを立てる監査証跡やドキュメント管理ダッシュボードを構築するのに十分です。

運用環境で証明書管理をどのように処理しますか?

ファイルシステムに.pfxファイルを保存することは開発中は機能しますが、プロダクションには適していません。 証明書ファイルには秘密鍵が含まれており、ファイルが侵害されると、その鍵で署名されたすべての文書が危険にさらされます。

Azure Key Vault の使用

Azure Key Vault を使用すると、秘密キーを保管庫から出さずに証明書を保存して使用できます。 .NET SDKは公開証明書情報をダウンロードするCertificateClientを提供します。 Key Vault 内に秘密キーを保持する実際の署名操作では、 Azure.Security.KeyVault.Keysパッケージを使用してサーバー側で暗号化操作を実行できます。

環境変数とシークレットの使用

小規模なプロジェクトの場合は、証明書を Base64 でエンコードされた文字列として環境変数またはASP.NET Core Secrets Managerに保存し、実行時にデコードします。

string certBase64 = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT")
    ?? throw new InvalidOperationException("PDF_SIGNING_CERT environment variable is not set.");

byte[] certBytes = Convert.FromBase64String(certBase64);
string certPassword = Environment.GetEnvironmentVariable("PDF_SIGNING_CERT_PASSWORD")
    ?? throw new InvalidOperationException("PDF_SIGNING_CERT_PASSWORD environment variable is not set.");

var signature = new PdfSignature(certBytes, certPassword);

このパターンは、資格情報をソース管理から切り離し、環境変数を更新してサービスを再起動するだけでローテーションを簡単に行えるようにします。

複数の PDF に効率的に一括署名するにはどうすればよいでしょうか?

一度の操作で数十または数百の文書に署名する必要がある場合(たとえば、月末に請求書のバッチ全体に署名する場合)、証明書を一度読み込み、すべての文書でPdfSignatureオブジェクトを再利用することでオーバーヘッドが削減されます。

using IronPdf;
using IronPdf.Signing;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/batch-sign", (IWebHostEnvironment env) =>
{
    string certPath = Path.Combine(env.ContentRootPath, "Certificates", "certificate.pfx");
    var signature = new PdfSignature(certPath, "yourPassword")
    {
        SigningReason = "Batch Invoice Approval"
    };

    string[] invoicePaths = Directory.GetFiles(
        Path.Combine(env.ContentRootPath, "Invoices"),
        "*.pdf"
    );

    string outputDir = Path.Combine(env.ContentRootPath, "Signed");
    Directory.CreateDirectory(outputDir);

    foreach (string invoicePath in invoicePaths)
    {
        var doc = PdfDocument.FromFile(invoicePath);
        doc.Sign(signature);
        string outputFile = Path.Combine(outputDir, Path.GetFileName(invoicePath));
        doc.SaveAs(outputFile);
    }

    return Results.Ok(new { SignedCount = invoicePaths.Length });
});

app.Run();

ループの外で一度だけPdfSignatureオブジェクトを作成すると、証明書ファイルは一度だけ読み込まれ、解析されます。 各反復では、個別の PDF が読み込まれ、署名され、保存されます。 非常に大きなバッチでは、並行して文書を処理するPdfDocumentインスタンスが単一スレッドに隔離されている場合、IronPDFの署名操作はスレッドセーフです。

一般的な署名エラーをトラブルシューティングするにはどうすればよいですか?

"証明書が見つかりません"または"パスワードが無効です"

証明書パスをPdfSignatureに渡す前に確認してください。 証明書のパスワードは大文字と小文字が区別され、完全に一致する必要があります。 開発では、単純なパスワードを使用して自己署名証明書を生成するのが一般的です。 本番環境では、パスワードをシークレットとして扱い、シークレット マネージャーから読み込みます。

PDFビューアで"署名が無効です"と表示される

Adobe Acrobat の"無効な署名"警告は、通常、次の 3 つのいずれかを意味します: (1) 証明書がビューアの証明書ストアによって信頼されていない、(2) 文書が署名後に変更された、(3) 署名証明書の有効期限が切れている。 実稼働環境で使用する場合は、信頼できる CA から証明書を取得し、システム クロックが同期されていることを確認します。 開発の場合、Adobe は自己署名証明書を一時的に信頼するための手順を提供します。

Sign() を呼び出した後、"ドキュメントは署名されていません"というメッセージが表示される

SaveAsを呼び出すか、ストリームに保存したときです。 Signの後に保存メソッドを呼び出していることを確認し、出力ファイルパスが書き込み可能であることを確認してください。

完全な API の詳細とトラブルシューティング リソースについては、 IronPDFドキュメント ハブIronPDFオブジェクト リファレンスをご覧ください。 サポートが必要な場合は、 IronPDFサポート ページからエンジニアリング チームに連絡できます。

次のステップは何ですか?

ASP.NET CoreでのデジタルPDF署名は、証明書のロード、Signの呼び出し、結果の保存という3つの基本操作を理解すると簡単になります。 IronPDF は暗号化に関する面倒な作業を処理するため、アプリケーションのビジネス ロジックに集中できます。

ドキュメント ワークフローの構築を続けるには、次の関連トピックを参照してください。

IronPDFの無料トライアルから始めて、1時間以内に最初の署名付きPDFを作成しましょう。 ご質問がある場合や特殊なケースに遭遇した場合は、 Iron Softwareサポート チームが、信頼性が高く法的に準拠したドキュメント署名ワークフローの実現をお手伝いします。

Curtis Chau
テクニカルライター

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

...
詳しく読む

関連する記事

Key in blue circle

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

制限なし。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日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。