IRONSOFTWAREHOME

署名者の証明書をC#で検証されたPDF署名から読み取る方法(X.509、eIDAS、チェーン)

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

契約が監査パイプラインに入ります。デジタル署名があり、その署名は有効であり、コンプライアンスチームは次のことを確認する必要があります: だれが署名したのか、その朝にその証明書は有効であったか、発行元のCAが信頼リストと一致するかどうか。生の署名バイトを取り出し、DERを解析し、証明書チェーンを手作業で追うことができます。 または、VerifiedSignature オブジェクトに SignerCertificate を要求し、プロパティとして回答を取得することもできます。

これが VerifiedSignatureSignerCertificateCertificateChain プロパティの目的です。 PdfDocument.GetVerifiedSignatures() から返され、署名者の完全なX.509アイデンティティ、発行CA、有効性の日付、SHA-256サムプリント、生のDERバイト、ルートまでのすべての中間証明書が公開されます。 これがeIDASコンプライアンス、証明書ピニング、監査トレイル、信頼チェーンの検証に必要なAPIインターフェースです。

このガイドでは、証明書検査の3つのファミリを紹介します:

  • 標準X.509詳細: アイデンティティプロパティ、完全な識別名、有効性期間、X509Certificate2 インターフェース向けの生のDERバイト。
  • eIDASおよび規制産業向けフィールド: SubjectSerialNumber から署名者の国IDを取得し、2.5.4.97 のような数値OIDを読み取り、eIDAS組織識別子を取得します。
  • 信頼チェーンの検証: SHA-256サムプリントのピニングと署名者からルートCAまでの完全なチェーンを走査します。

無料の30日間トライアルを開始して、検証パイプラインで証明書の検査をテストしてみてください。

NuGetInstall with NuGet

PM > Install-Package IronPdf

Install IronPDF by running the command above in the NuGet Package Manager Console, or search for the package in the NuGet Package Manager.
クイックスタート: 署名済みPDFから署名者の証明書を読み取る

読み込まれたPDFに対して GetVerifiedSignatures を呼び出し、結果から署名者の証明書プロパティを直接読み取ります。

  1. 1Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf

  2. 2Copy and run this code snippet.

    var sig = PdfDocument.FromFile("signed.pdf").GetVerifiedSignatures().First();
    var cert = sig.SignerCertificate;
    Console.WriteLine($"{cert?.CommonName} ({cert?.Organization}) valid until {cert?.NotAfter}");
    C#
  3. 3Deploy to test on your live environment

    Start using IronPDF in your project today with a free trial
    arrow pointer

署名者の国または個人IDをどのようにして取得しますか?

SubjectSerialNumber プロパティは、証明書のSubject DNのSERIALNUMBER OIDの値を返します。 規制された産業(eIDAS適格証明書、銀行業、政府発行のデジタルID)では、このフィールドは署名者の国ID、納税者番号、または個人識別番号を持っています。 これは証明書自身のシリアル番号ではありません; それは CertificateSerialNumber です。

using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("eidas-signed-invoice.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Subject DN SERIALNUMBER OID (national ID, tax ID, etc.)
    Console.WriteLine($"Signer Identity (SERIALNUMBER): {cert.SubjectSerialNumber ?? "not present"}");

    // Certificate's own serial from the issuing CA
    Console.WriteLine($"Certificate Serial (CA-issued):  {cert.CertificateSerialNumber}");
}
Tips: これら二つの違いを簡単にリマインド: SubjectSerialNumber は、誰が文書に署名したかを教えてくれる(Subject DNに埋め込まれた国IDや納税者番号のような個人または組織ID) CertificateSerialNumber は、どの証明書が使われたかを教えてくれます; それは、発行元の認証機関が失効リストや監査ログのために割り当てたユニークなシリアルです。

便利なアイデンティティプロパティにアクセスするにはどうしますか?

SignerCertificateInfo は、必要に応じてSubject DNフィールドを直接プロパティとして公開しているため、DN文字列を自分で解析する必要はありません。

署名者の名前と所属を読み取る

Country、および Email プロパティは、ほとんどのアイデンティティワークフローが最初に使用するためのものです。

using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("signed-agreement.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Common Subject DN fields exposed directly as properties
    Console.WriteLine($"CommonName (CN):  {cert.CommonName}");
    Console.WriteLine($"Organization (O): {cert.Organization}");
    Console.WriteLine($"Country (C):      {cert.Country}");
    Console.WriteLine($"Email:            {cert.Email}");
}

Email プロパティはまずSubject DN内のemailAddress OIDをチェックします。 存在しない場合、Subject Alternative Name (SAN) rfc822Name 拡張にフォールバックします。 Country プロパティは、ISO 3166-1 alpha-2コード(例:"DE"、"US"、"FR"など)を返します。 該当するフィールドが証明書に存在しない場合、すべての便利プロパティは null を返します。

完全なDNが必要な場合の読み取り

監査ログや下流での解析、あるいはコンプライアンスポートのために、SubjectDNIssuerDN は、完全な識別名の文字列を返します。

using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("signed-agreement.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Full DN strings for audit logging or downstream parsing
    Console.WriteLine($"Full Subject DN: {cert.SubjectDN}");
    Console.WriteLine($"Full Issuer DN:  {cert.IssuerDN}");
}

任意のSubjectおよびIssuerフィールドを抽出するにはどうしましょうか?

GetSubjectField(string) および GetIssuerField(string) メソッドは、短縮名または数値OIDのどちらかを受け入れます。 それらは大文字小文字を区別せず、フィールドが存在しない場合 null を返します。

サポートされている短縮名: ORGANIZATIONIDENTIFIER

任意のSubjectフィールドを読み取る(eIDAS OIDを含む)

Subject DNから任意のフィールドを取得するために、"OU" のような短縮名や、"2.5.4.97"(eIDASの組織識別子)のような数値OIDを指定します。

using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("eidas-contract.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Short-name lookups (case-insensitive)
    string? orgUnit = cert.GetSubjectField("OU");
    string? surname = cert.GetSubjectField("SURNAME");
    string? givenName = cert.GetSubjectField("GIVENNAME");
    string? title = cert.GetSubjectField("T");

    // Numeric OID lookup (eIDAS organizationIdentifier)
    string? orgId = cert.GetSubjectField("2.5.4.97");

    Console.WriteLine($"Name: {givenName} {surname} ({title}), OU: {orgUnit}");
    Console.WriteLine($"eIDAS Org ID (2.5.4.97): {orgId ?? "not present"}");
}

数値OIDの検索は、組織識別子、専門資格、または標準の短縮名でカバーされていない管轄特定のフィールドを埋め込みeIDASや規制産業証明書で重要です。

発行者のフィールドを読み取る

GetIssuerField は、発行CAのDistinguished Nameに対して同じ方法で動作します。 これは、信頼の検証、CAレポート、および発行機関による署名のグループ化に役立ちます。

using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("eidas-contract.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // GetIssuerField works the same way as GetSubjectField
    string? issuerCN = cert.GetIssuerField("CN");
    string? issuerO = cert.GetIssuerField("O");
    string? issuerCountry = cert.GetIssuerField("C");

    Console.WriteLine($"Issued by: {issuerCN} ({issuerO}, {issuerCountry})");
}

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

Milan Jovanovic

Microsoft MVP

ケーススタディを見る

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

Brent Matzelle

最高技術責任者, OPYN

ケーススタディを見る

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

David Jones

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

ケーススタディを見る

証明書の有効性を確認するにはどうしますか?

SignerCertificateInfo は2つの有効性ヘルパーを提供します:

  • IsExpired は、DateTime.UtcNow > NotAfter の場合 true を返します。
  • IsValidAt(DateTime) は、指定されたタイムスタンプが NotAfter ウィンドウ内にある場合に true を返します。 一般的な用途としては、署名時に証明書が有効であったことを確認することです。
using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("archived-contract.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    Console.WriteLine($"Valid from:  {cert.NotBefore}");
    Console.WriteLine($"Valid until: {cert.NotAfter}");
    Console.WriteLine($"Expired now: {cert.IsExpired}");

    // Confirm certificate was valid when the document was signed
    bool validAtSigning = cert.IsValidAt(sig.SigningDate);
    Console.WriteLine($"Valid at signing time ({sig.SigningDate}): {validAtSigning}");
}
Tips: IsExpired は、証明書から有効性日付が抽出できないときに trueではない)を返します。 ヘルパーは意図的に保守的です;メタデータが欠けているために失効を想定したりしません。 ゼロトラストワークフローで、欠落した有効性日付を明示的な失敗ケースとして扱います。

監査トレイルのためには、IsExpired チェック(現在の有効性)と IsValidAt(signingDate) チェック(署名時の有効性)を両方記録してください。 その後失効した証明書であっても、文書が署名された時点で有効であった可能性があります; コンプライアンスのためには両方のデータポイントが重要です。

SHA-256サムプリントを使用して証明書をピニングするにはどうしますか?

Sha256Thumbprint プロパティは、DERエンコードされた証明書のSHA-256ハッシュである64文字の大文字の16進文字列を返します。 これは、承認された署名者証明書の既知の良好リストに対してピン留めする値です。

using IronPdf;
using IronPdf.Signing.Inspection;
using System.Collections.Generic;

// Known-good signer thumbprints from a compliance database
var pinnedThumbprints = new HashSet<string>
{
    "A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2",
    "F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5D4C3B2A1F6E5"
};

var pdf = PdfDocument.FromFile("submitted-form.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Pin against trusted thumbprint list
    bool trusted = pinnedThumbprints.Contains(cert.Sha256Thumbprint);
    Console.WriteLine($"Signer: {cert.CommonName}, Thumbprint: {cert.Sha256Thumbprint}");
    Console.WriteLine($"Pinned: {trusted}");
}

生の証明書データからX509Certificate2を構築するにはどうしますか?

RawData プロパティは、byte[] としてDERエンコードされた証明書を返します。 各呼び出しは防御的なコピーを返すため、内部データが参照によって公開されることはありません。 これを使用して、.NETのネイティブ暗号API(チェーンの構築、ポリシーの検証、CRLのチェック)との相互運用のための System.Security.Cryptography.X509Certificates.X509Certificate2 を構築できます。

using IronPdf;
using IronPdf.Signing.Inspection;
using System.Security.Cryptography.X509Certificates;

var pdf = PdfDocument.FromFile("signed-report.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    var cert = sig.SignerCertificate;
    if (cert is null) continue;

    // Construct X509Certificate2 from defensive DER copy
    byte[] derBytes = cert.RawData;
    var x509 = new X509Certificate2(derBytes);

    Console.WriteLine($"X509 Subject:    {x509.Subject}");
    Console.WriteLine($"X509 Issuer:     {x509.Issuer}");
    Console.WriteLine($"X509 Serial:     {x509.SerialNumber}");
    Console.WriteLine($"X509 Algorithm:  {x509.SignatureAlgorithm.FriendlyName}");
    Console.WriteLine($"X509 Key Size:   {x509.PublicKey.Key.KeySize} bits");
}
Please note: RawData への各アクセスは新しい防御的なコピーを返します。 内部バイト配列は参照によって公開されないため、返されるバイトを変更しても後の呼び出しには影響しません。

この相互運用パスにより、X509Chain.Build() などの既存 for .NET証明書検証パイプラインやCRL/OCSPを介した失効チェック、またはカスタムX509CertificateValidator実装にIronPDFの署名検証を接続することができます。

証明書チェーンをどのようにしてたどりますか?

CertificateChain プロパティは、署名者 → 中間CA(s) → ルートCAの順に整列されたIReadOnlyList<SignerCertificateInfo> を返します。 インデックス0は常に署名者証明書です(SignerCertificate と同じオブジェクト)。 リストは決してnullではありません; チェーンが抽出できない場合、それは署名者証明書のみを含みます。

using IronPdf;
using IronPdf.Signing.Inspection;

var pdf = PdfDocument.FromFile("enterprise-signed.pdf");

foreach (var sig in pdf.GetVerifiedSignatures())
{
    Console.WriteLine($"--- Signature: {sig.SignatureName} ---");
    Console.WriteLine($"Chain length: {sig.CertificateChain.Count}");

    // Walk from signer (index 0) through intermediates to root CA
    for (int i = 0; i < sig.CertificateChain.Count; i++)
    {
        var cert = sig.CertificateChain[i];
        string role = i == 0 ? "Signer"
                    : i == sig.CertificateChain.Count - 1 ? "Root CA"
                    : $"Intermediate CA ({i})";

        Console.WriteLine($"  [{role}]");
        Console.WriteLine($"    Subject:     {cert.SubjectDN}");
        Console.WriteLine($"    Issuer:      {cert.IssuerDN}");
        Console.WriteLine($"    Serial:      {cert.CertificateSerialNumber}");
        Console.WriteLine($"    Valid:       {cert.NotBefore} to {cert.NotAfter}");
        Console.WriteLine($"    Expired:     {cert.IsExpired}");
        Console.WriteLine($"    Thumbprint:  {cert.Sha256Thumbprint}");
    }
}
Please note: チェーン内の各SignerCertificateInfoSignerCertificate と同じプロパティを公開します:アイデンティティフィールド、有効性、サムプリント、GetIssuerField()。 各中間CAの有効期限を検証し、ルートのサムプリントを信頼されたルートストアと照合し、コンプライアンス監査のために完全なチェーンをログに記録できます。

次のステップ

CertificateChainは、IronPDF APIの範囲を離れることなく、フルX.509検査を提供します。 ここから、これらのプロパティがプラグインされているIronPDFの部分にさらに進むのが自然な次のステップです。

ワークフローの署名側については、デジタル署名ハウトゥーで証明書の作成、メタデータ、および増分署名がカバーされています。 高セキュリティ環境でのHSMベースの署名については、HSM署名ガイドでPKCS#11統合がカバーされています。 実行可能なスニペットが必要ですか? デジタル署名コードの例が提供されています。

自社の署名済みPDFで試してみますか? 無料の30日間トライアルを開始するか、ライセンスオプションを表示します。

Frequently Asked Questions

PDF署名からX.509証明書の詳細を読み取る目的は何ですか?

PDF署名からX.509証明書の詳細を読み取ることで、署名者の身元を確認し、証明書の有効性を確認し、eIDASのような標準に準拠していることを確保できます。このプロセスは、文書の信憑性と整合性を維持するために不可欠です。

IronPDFはPDF署名から署名者の身元をどのように抽出しますか?

IronPDFは、X.509証明書の詳細にアクセスすることで、PDF署名から署名者の身元を抽出するツールを提供し、文書の出所の認証と署名者の資格の確認を容易にします。

IronPDFはPDF署名からeIDASフィールドを抽出できますか?

はい、IronPDFはPDF署名からeIDASフィールドを抽出でき、開発者が電子署名に関するEUの規制に準拠していることを確保できます。

IronPDFを使用してPDF署名からどのような情報を取得できますか?

IronPDFを使用することで、署名者の身元、証明書の有効性、フィンガープリント、証明書チェーンなどの情報をPDF署名から取得でき、署名の信憑性を包括的に把握できます。

IronPDFを使用してPDF署名の有効性を確認することは可能ですか?

はい、IronPDFはX.509証明書の詳細を検査することでPDF署名の有効性を確認でき、満了日や署名証明書の整合性の確認を含むことができます。

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

PDF署名の検証にIronPDFを使用することで、詳細な証明書情報の自動抽出、C#アプリケーションとの互換性、eIDASのような国際規格への準拠などの利点があります。

IronPDFはPDF署名からフィンガープリントの抽出をどのように処理しますか?

IronPDFは、PDF署名内のX.509証明書の詳細にアクセスすることでフィンガープリントの抽出を処理し、ユニークなフィンガープリントを通じて証明書の信憑性と整合性を確認できます。

IronPDFはPDF署名から証明書チェーンを提供できますか?

IronPDFはPDF署名から証明書チェーンを提供でき、署名者の証明書から信頼されたルート証明書までの信頼のパスを追跡し、署名の有効性を確保します。

PDF署名を読み取るためにIronPDFがサポートするプログラミング言語は何ですか?

IronPDFはC#をサポートしており、PDF署名の読み取りと検証を行うのに理想的な解決策を提供します。

IronPDFは電子署名に関する国際規格に準拠していますか?

はい、IronPDFはeIDASのような国際規格に準拠しており、PDF署名の検証プロセスが電子署名のための規制要件を満たすようにしています。

Curtis Chau
Technical Writer

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.

...
Read More

準備はできましたか?

Nuget Downloads 20,389,208バージョン:2026.7リリースされたばかり

あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。

試用版の IronPDF を無料でお試しください

5分でセットアップ完了

C# PDF DLL

DLLをダウンロード

今すぐダウンロード

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

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

NuGetでインストール

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

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

bullet_checkedクレジットカードやアカウントの作成は不要です。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge related to IronPDF Product Demo

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

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