JavaでPDFをデジタル署名する方法

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

IronPDFを使用してJavaでPDFにデジタル署名することにより、ドキュメントの正当性を確認し、無許可の変更を検出する暗号署名を適用できます。 IronPDFは、任意のPDFにPFX証明書ベースの署名を添付するPdfCertificationLevelによるPDF認証レベルの制御、および署名の長期有効性を確保するためのタイムスタンプ認証機関(TSA)サーバーへの接続をサポートしています。

クイックスタート: JavaでPDFにデジタル署名する

  1. MavenまたはGradleを介してJava用のIronPDFをインストールする
  2. License.setLicenseKey() でライセンスキーを設定してください
  3. PdfDocument.fromFile() を使用して PDF を読み込む
  4. PFX証明書ファイルとパスワードを使用して PdfSignature を作成してください
  5. signDigitalSignature() を使用して署名を適用してください。
  6. 署名済みのPDFをsaveAs()として保存してください

```java :title=クイックスタート //:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/quickstart.java インポート java.io.IOException; import java.nio.file.Path; import com.ironsoftware.IronPdf.License; インポート com.ironsoftware.ironPdf.PdfDocument; import com.ironsoftware.IronPdf.Signature.PdfSignature;

public class Main { public static void main(String[] args) throws IOException { {. // IronPDFライセンスキーを設定します License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

    // 既存のPDFドキュメントを読み込む
    PdfDocument pdf = PdfDocument.fromFile(Path.of("document.pdf"));

    // PFX証明書ファイルとそのパスワードを使用してPdfSignatureを作成する
    PdfSignature signature = new PdfSignature("certificate.pfx", "password123");

    // 監査トレイルのために署名メタデータを設定
    signature.setSigningContact("John Smith");
    signature.setSigningLocation("ニューヨーク");
    signature.setSigningReason("ドキュメント承認");

    // PDFにデジタル署名を適用する
    pdf.signDigitalSignature(signature);

    // 署名済みのPDFを新しいファイルに保存する
    pdf.saveAs(Path.of("signed.pdf"));
}

}


デジタル署名は、PDFドキュメントにプライベートキーと証明書に関連付けられた暗号化関連を提供します。 受取人がAdobe Acrobatやその他の適合ビューアで署名済みPDFを開くと、アプリケーションは証明書チェーンが信頼された認証局に遡ることを確認し、署名後にドキュメントの内容が変更されていないことを検証します。 この認証と整合性の組み合わせにより、契約書、請求書、規制書類、改ざん証拠が問題となる任意の文書にとってデジタル署名は不可欠です。

PDF署名には、承認署名とオーサー(認定)署名の2種類があります。 承認署名は、ある時点での署名者の承認を記録します。複数の当事者が連続して承認署名を追加しても、以前の署名が無効になることはありません。 `certify()` で適用された認証署名は、`PdfCertificationLevel` に基づいてドキュメントをロックし、署名者をドキュメントの作成者として指定します。 認定署名は、ドキュメントの最初の署名である必要があり、その後の署名者が行える変更(許される場合)は制御されます。

IronPDFは、`PdfDocument`を基盤とした一貫性のあるAPIを通じて、両方の署名タイプを処理します。 初期セットアップ、依存関係の構成、およびライセンスキーの指示については、[スタートアップ概要](https://ironpdf.com/java/docs/)を参照してください。

<div class="hsg-featured-snippet">
    <h2>JavaでのPDFのデジタル署名方法</h2>
    <ol>
        <li><a href="https://ironpdf.com/java/#download-modal">デジタル署名のためのIronPDF Javaライブラリをインストールする</a></li>
        <li><strong>PdfDocument</strong>クラスを使用してPDFを読み込む</li>
        <li>PFX証明書ファイルとパスワードを使用して<strong>PdfSignature</strong>を作成する</li>
        <li><code>setSignatureImage</code>を使用して目に見える署名画像を設定する(任意)</li>
        <li><code>signDigitalSignature</code>を使用して署名を適用する</li>
        <li><code>certify</code>と<code>PdfCertificationLevel</code>でPDFを認定する</li>
        <li><code>saveAs</code>で署名済みのPDFを保存する</li>
    </ol>
</div>

## 始める前に何が必要ですか?

IronPDFによるPDF署名を行う前に次の前提条件を確認してください:

- **Java 8以降**:IronPDFはJDK8以上のバージョンを必要とします。
- **IronPDF for Java**:依存関係をビルドファイルに追加してください。最新バージョンは[Maven Central](https://central.sonatype.com/artifact/com.ironsoftware/ironpdf)で確認できます。
- **有効なライセンスキー**:アプリケーションの起動時に `License.setLicenseKey()` を使用してキーを設定してください。 設定の詳細については、[ライセンスキーガイド](https://ironpdf.com/java/get-started/license-keys/)をご覧ください。
- **PFX または P12 証明書ファイル**:これはプライベートキーと公開証明書をPKCS#12形式で含むパスワード保護されたアーカイブです。 自己署名証明書は開発およびテストに適しています; 本番ドキュメントで外部受取人に信頼される必要がある場合、DigiCert、Comodo、GlobalSignなどの認定機関によって発行された証明書を使用してください。

完全な依存関係のセットアップとプロジェクト構成については[スタートアップ概要](https://ironpdf.com/java/docs/)を参照してください。

## PDFにデジタル署名を適用する方法は?

`PdfSignature` コンストラクタは、PFX 証明書のファイルパスとそのパスワードを受け取ります。 一度構築されたら、3つのセッターメソッドを使用してオプションのメタデータを添付できます:

- `setSigningContact(String)`: 署名者の氏名またはメールアドレス
- `setSigningLocation(String)`: 署名者の物理的または組織的な所在地
- `setSigningReason(String)`: 文書に署名する理由に関する簡単な説明

これらのフィールドはPDFビューアの署名プロパティパネルに表示され、コンプライアンス目的のために有用な監査記録を作成します。 読み込まれた `PdfDocument` に対して `signDigitalSignature(PdfSignature)` を呼び出して暗号署名を埋め込み、その結果を `saveAs()` で保存します。

```java
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/apply-signature.java
インポート java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
インポート com.ironsoftware.ironPdf.PdfDocument;
import com.ironsoftware.IronPdf.Signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException { {.
        // IronPDFライセンスキーを設定します
        License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF to sign
        PdfDocument pdf = PdfDocument.fromFile(Path.of("contract.pdf"));

        // Construct the PdfSignature with the certificate path and password
        PdfSignature signature = new PdfSignature("certificate.pfx", "password123");

        // Set metadata that will appear in the signature properties panel
        signature.setSigningContact("Jane Doe");
        signature.setSigningLocation("Austin, TX");
        signature.setSigningReason("Contract Approval");

        // Embed the digital signature in the PDF
        pdf.signDigitalSignature(signature);

        // Save the signed document
        pdf.saveAs(Path.of("contract-signed.pdf"));
    }
}

signDigitalSignature() の処理が完了すると、PDF には PFX ファイルの秘密鍵で署名されたドキュメント内容の暗号ハッシュが含まれます。この時点以降にファイルに変更が加えられると、署名は無効になります。

PDFに視覚的な署名画像を追加する方法は?

視覚的な署名画像は、署名フィールドの位置でPDFページにグラフィカルな表現を直接配置します。 これはスキャンした手書きの署名、会社のハンコまたはロゴを表示するために一般的に使用され、ドキュメントがPDFリーダーの署名パネルで検査された時だけでなく、印刷または表示された時に署名されたように見せます。

画像を表示するには、画像ファイルを FileInputStream として開き、PdfSignature.setSignatureImage(InputStream) に渡してから、signDigitalSignature() を呼び出してください。 画像はページ上の署名フィールド内に組み込まれます。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/visible-signature-image.java
import java.io.FileInputStream;
インポート java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
インポート com.ironsoftware.ironPdf.PdfDocument;
import com.ironsoftware.IronPdf.Signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException { {.
        // IronPDFライセンスキーを設定します
        License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF document to sign
        PdfDocument pdf = PdfDocument.fromFile(Path.of("agreement.pdf"));

        // Build the PdfSignature from a PFX certificate
        PdfSignature signature = new PdfSignature("certificate.pfx", "password123");

        // Set signing metadata
        signature.setSigningContact("Alice Johnson");
        signature.setSigningLocation("Chicago, IL");
        signature.setSigningReason("Agreement Authorization");

        // Open the signature image file and attach it to the signature
        FileInputStream imageStream = new FileInputStream("signature.png");
        signature.setSignatureImage(imageStream);

        // Apply the digital signature with the visible image to the PDF
        pdf.signDigitalSignature(signature);

        // Save the signed PDF with the visible signature image embedded
        pdf.saveAs(Path.of("agreement-signed.pdf"));
    }
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/visible-signature-image.java
import java.io.FileInputStream;
インポート java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
インポート com.ironsoftware.ironPdf.PdfDocument;
import com.ironsoftware.IronPdf.Signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException { {.
        // IronPDFライセンスキーを設定します
        License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF document to sign
        PdfDocument pdf = PdfDocument.fromFile(Path.of("agreement.pdf"));

        // Build the PdfSignature from a PFX certificate
        PdfSignature signature = new PdfSignature("certificate.pfx", "password123");

        // Set signing metadata
        signature.setSigningContact("Alice Johnson");
        signature.setSigningLocation("Chicago, IL");
        signature.setSigningReason("Agreement Authorization");

        // Open the signature image file and attach it to the signature
        FileInputStream imageStream = new FileInputStream("signature.png");
        signature.setSignatureImage(imageStream);

        // Apply the digital signature with the visible image to the PDF
        pdf.signDigitalSignature(signature);

        // Save the signed PDF with the visible signature image embedded
        pdf.saveAs(Path.of("agreement-signed.pdf"));
    }
}
JAVA

署名画像は暗号保護を置き換えはしません; グラフィカルなスタンプと基礎となる証明書は署名済みの出力の一部として残ります。 署名画像にはPNGとJPEGフォーマットがサポートされています。

特定の許可レベルでPDFを認定する方法は?

PDFを認定することは、承認署名の追加とは異なります。 pdf.certify(PdfSignature, PdfCertificationLevel) を呼び出すと、そのドキュメントの作成者として署名し、後続のユーザーが許可される変更の種類を指定します。 認定されたPDFは、Adobe Acrobatで青いリボンまたは類似の信頼指標を表示し、受取人にそのドキュメントが確認されたソースから来ていることを知らせます。

IronPDFは、PdfCertificationLevel列挙型を通じて3つの認定レベルを提供しています:

  • PdfCertificationLevel.NO_CHANGES_ALLOWED: 認証後、ドキュメントは完全にロックされます; それ以上の変更は許可されません。
  • PdfCertificationLevel.FORM_FILLING: 受信者はフォームの入力欄に記入できますが、コメント、注釈、その他の変更を加えることはできません。
  • PdfCertificationLevel.FORM_FILLING_AND_ANNOTATIONS: 受信者はフォームフィールドへの入力や注釈の追加は可能ですが、構造的な編集は依然として禁止されています。

認証署名は文書上の最初の署名でなければならないため、他の関係者による承認署名を適用する前に、certify()を呼び出してください。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/certify-pdf.java
インポート java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
インポート com.ironsoftware.ironPdf.PdfDocument;
import com.ironsoftware.ironpdf.signature.PdfCertificationLevel;
import com.ironsoftware.IronPdf.Signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException { {.
        // IronPDFライセンスキーを設定します
        License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF that will be certified
        PdfDocument pdf = PdfDocument.fromFile(Path.of("report.pdf"));

        // Create the PdfSignature from the author's certificate
        PdfSignature signature = new PdfSignature("author-certificate.pfx", "password123");

        // Set author metadata for the certification signature
        signature.setSigningContact("Legal Department");
        signature.setSigningLocation("San Francisco, CA");
        signature.setSigningReason("Official Publication");

        // Certify the document with NO_CHANGES_ALLOWED to lock it completely
        // Use FORM_FILLING to allow form field input after certification
        // Use FORM_FILLING_AND_ANNOTATIONS to also permit annotations
        pdf.certify(signature, PdfCertificationLevel.NO_CHANGES_ALLOWED);

        // Save the certified PDF
        pdf.saveAs(Path.of("report-certified.pdf"));
    }
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/certify-pdf.java
インポート java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
インポート com.ironsoftware.ironPdf.PdfDocument;
import com.ironsoftware.ironpdf.signature.PdfCertificationLevel;
import com.ironsoftware.IronPdf.Signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException { {.
        // IronPDFライセンスキーを設定します
        License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF that will be certified
        PdfDocument pdf = PdfDocument.fromFile(Path.of("report.pdf"));

        // Create the PdfSignature from the author's certificate
        PdfSignature signature = new PdfSignature("author-certificate.pfx", "password123");

        // Set author metadata for the certification signature
        signature.setSigningContact("Legal Department");
        signature.setSigningLocation("San Francisco, CA");
        signature.setSigningReason("Official Publication");

        // Certify the document with NO_CHANGES_ALLOWED to lock it completely
        // Use FORM_FILLING to allow form field input after certification
        // Use FORM_FILLING_AND_ANNOTATIONS to also permit annotations
        pdf.certify(signature, PdfCertificationLevel.NO_CHANGES_ALLOWED);

        // Save the certified PDF
        pdf.saveAs(Path.of("report-certified.pdf"));
    }
}
JAVA

NO_CHANGES_ALLOWEDによる認証が完了すると、PDFを改変しようとすると認証署名が破損し、PDFビューアに警告が表示されます。 認証済み文書を、作成者の認証を無効にすることなく、下流の受領者が記入または注釈を付ける必要がある場合は、FORM_FILLING または FORM_FILLING_AND_ANNOTATIONS を選択してください。

デジタル署名にタイムスタンプを追加する方法は?

タイムスタンプ機関(TSA)サーバーは、PDFに署名と共に埋め込まれる暗号署名の時刻トークンを提供します。 このタイムスタンプは、署名者のローカルクロックとは無関係に署名が適用された時刻を証明します。 長期的な有効性はタイムスタンプに依存します:署名証明書が期限切れになった後でも、信頼されたタイムスタンプは検証者が署名が証明書がまだ有効な間に作成されたことを確認することを可能にします。

タイムスタンプを有効にするには、署名を行う前に PdfSignature オブジェクトの 2 つのプロパティを設定してください:

  • setTimestampHashAlgorithm(PdfHashAlgorithm): タイムスタンプトークンの計算に使用するハッシュアルゴリズムを指定します。 PdfHashAlgorithm.SHA256 が標準的な選択肢です。
  • setTimestampUrl(String): タイムスタンプトークンを発行するTSAサーバーのHTTPまたはHTTPSエンドポイント。

テストおよび低容量の本番使用のために複数のTSAサーバーが無償で利用可能です。 https://freetsa.org/tsr および http://timestamp.digicert.com は、よく使用される 2 つのエンドポイントです。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/timestamp-signature.java
インポート java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
インポート com.ironsoftware.ironPdf.PdfDocument;
import com.ironsoftware.ironpdf.signature.PdfHashAlgorithm;
import com.ironsoftware.IronPdf.Signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException { {.
        // IronPDFライセンスキーを設定します
        License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF to sign with a timestamp
        PdfDocument pdf = PdfDocument.fromFile(Path.of("invoice.pdf"));

        // Construct the PdfSignature from the certificate file
        PdfSignature signature = new PdfSignature("certificate.pfx", "password123");

        // Set signature metadata
        signature.setSigningContact("Finance Team");
        signature.setSigningLocation("Seattle, WA");
        signature.setSigningReason("Invoice Authorization");

        // Configure the timestamp: set the hash algorithm and TSA endpoint
        signature.setTimestampHashAlgorithm(PdfHashAlgorithm.SHA256);
        signature.setTimestampUrl("https://freetsa.org/tsr");

        // Apply the digital signature; IronPDF will contact the TSA to obtain
        // and embed a timestamp token alongside the cryptographic signature
        pdf.signDigitalSignature(signature);

        // Save the timestamped, signed PDF
        pdf.saveAs(Path.of("invoice-signed-timestamped.pdf"));
    }
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/timestamp-signature.java
インポート java.io.IOException;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
インポート com.ironsoftware.ironPdf.PdfDocument;
import com.ironsoftware.ironpdf.signature.PdfHashAlgorithm;
import com.ironsoftware.IronPdf.Signature.PdfSignature;

public class Main {
    public static void main(String[] args) throws IOException { {.
        // IronPDFライセンスキーを設定します
        License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01");

        // Load the PDF to sign with a timestamp
        PdfDocument pdf = PdfDocument.fromFile(Path.of("invoice.pdf"));

        // Construct the PdfSignature from the certificate file
        PdfSignature signature = new PdfSignature("certificate.pfx", "password123");

        // Set signature metadata
        signature.setSigningContact("Finance Team");
        signature.setSigningLocation("Seattle, WA");
        signature.setSigningReason("Invoice Authorization");

        // Configure the timestamp: set the hash algorithm and TSA endpoint
        signature.setTimestampHashAlgorithm(PdfHashAlgorithm.SHA256);
        signature.setTimestampUrl("https://freetsa.org/tsr");

        // Apply the digital signature; IronPDF will contact the TSA to obtain
        // and embed a timestamp token alongside the cryptographic signature
        pdf.signDigitalSignature(signature);

        // Save the timestamped, signed PDF
        pdf.saveAs(Path.of("invoice-signed-timestamped.pdf"));
    }
}
JAVA

署名時にTSAが到達不能な場合、IronPDFは例外をスローします; ネットワークアクセスとTSAエンドポイントURLを確認し、本番環境に展開する前に確認してください。 高容量のプロダクションワークフローのためには、商用TSAサブスクリプションを検討して、稼働時間とスループット保証を確保してください。

JavaでPDFをデジタル署名する次のステップは?

IronPDFのPdfSignatureクラスは、証明書メタデータ付きの承認署名、視認可能なグラフィカルスタンプ、アクセス制御レベルを備えたPDF認証、および長期的な有効性を保証するTSA(タイムスタンプサービス)対応のタイムスタンプなど、PDF署名に関するあらゆる要件を網羅しています。 PDFワークフローを署名以外にも拡張するために、これらの関連リソースを探る:

無料トライアルを開始して、JavaのPDFワークフローにデジタル署名を追加してください。 生産用途のライセンスを購入するには、ライセンスオプションを表示してください。

よくある質問

JavaでIronPDFを使用してPDFにデジタル署名をする方法は?

PdfDocument.fromFile()を使用してPDFを読み込み、PFX証明書ファイルへのパスとそのパスワードを使用してPdfSignatureを作成し、signDigitalSignature(signature)を呼び出し、pdf.saveAs()で保存します。

IronPDFにおけるsignDigitalSignature()とcertify()の違いは何ですか?

signDigitalSignature()は、1人の署名者の承認を記録する承認署名を追加します。複数の承認署名を順番に追加できます。certify()は、ドキュメントの最初にある必要がある作者署名を追加し、後続の署名者が行える変更を制御するPdfCertificationLevelを設定します。

Javaで署名済みPDFに可視署名画像を追加するにはどうすればいいですか?

FileInputStreamとして画像ファイルを開き、signature.setSignatureImage(imageStream)に渡してからsignDigitalSignature()を呼び出します。画像は、ページ上の暗号署名と共に署名フィールドに埋め込まれます。

IronPDFがサポートするPDF認証レベルは何ですか?

IronPDFは、PdfCertificationLevel列挙型を介して3つのレベルをサポートします。NO_CHANGES_ALLOWEDはドキュメントを完全にロックし、FORM_FILLINGはフォームフィールド入力のみを許可し、FORM_FILLING_AND_ANNOTATIONSは構造的な編集を防ぎながらフォームフィールドと注釈を許可します。

Javaでデジタル署名にタイムスタンプを追加するにはどうすればよいですか?

PdfSignaturesignature.setTimestampHashAlgorithm(PdfHashAlgorithm.SHA256)signature.setTimestampUrl("https://freetsa.org/tsr")を設定してからsignDigitalSignature()を呼び出します。IronPDFはTSAサーバーに接続し、署名済みPDFにタイムスタンプトークンを埋め込みます。

IronPDFがPDF署名に必要とする証明書ファイル形式は何ですか?

IronPDFはPFXまたはP12証明書ファイルが必要です。これは、プライベートキーと公開証明書を含むPKCS#12アーカイブです。自己署名証明書は開発用に機能します。実運用には、DigiCertやGlobalSignのような信頼できる認証局から証明書を取得してください。

JavaでIronPDFを使用してPDFにデジタル署名をするための前提条件は何ですか?

Java 8以上が必要で、MavenまたはGradle経由で追加されたIronPDF依存関係を持ち、有効なライセンスキーがLicense.setLicenseKey()で設定され、PFXまたはP12証明書ファイルとそのパスワードが必要です。

Darrius Serrant
フルスタックソフトウェアエンジニア(WebOps)

Darrius Serrantは、マイアミ大学でコンピュータサイエンスの学士号を取得し、Iron SoftwareでフルスタックWebOpsマーケティングエンジニアとして働いています。若い頃からコーディングに惹かれ、コンピューティングを神秘的かつアクセス可能なものとし、創造性と問題解決のための完璧な媒体と考えていました。

Iron Softwareでは、新しいものを創造することと、複雑なコンセプトをより理解しやすくすることを楽しんでいます。Resident Developerの一人として、次世代に専門知識を共有するために、学生を教えることにも志願しました。

Darriusにとって、その仕事は価値があり、実際の影響があるため、満足感があります。

準備はできましたか?
バージョン: 2026.5 just released
Still Scrolling Icon

まだスクロールしていますか?

すぐに証拠が欲しいですか?
サンプルを実行するHTML が PDF に変換されるのを確認します。