ドキュメントのデジタル署名と認証

このドキュメントのサンプルと例は、JEE上のAEM Forms環境に限られています。

Signatureサービスについて

Signatureサービスを使用すると、組織が配布および受信するAdobe PDFドキュメントのセキュリティとプライバシーを保護できます。 このサービスでは、電子署名と証明書を使用して、意図された受信者だけがドキュメントを変更できるようにします。 セキュリティ機能はドキュメント自体に適用されるので、ドキュメントはライフサイクル全体に対して保護され、制御されたままになります。 ドキュメントは、ファイアウォールを超えて、オフラインでダウンロードされた場合、および組織に送り返された場合に、セキュリティで保護されたままになります。

メモ

PDFドキュメントへの署名など、特定の操作が呼び出されたときに呼び出されるSignatureサービス用のカスタム署名ハンドラーを作成できます。

署名フィールド名

一部のSignatureサービス操作では、操作を実行する署名フィールドの名前を指定する必要があります。 例えば、PDFドキュメントに署名する際に、署名する署名フィールドの名前を指定します。 署名フィールドの完全名がform1[0].Form1[0].SignatureField1[0]であるとします。 form1[0].Form1[0].SignatureField1[0]の代わりにSignatureField1[0]を指定できます。

競合が発生すると、Signatureサービスが誤ったフィールドに署名する(または署名フィールド名を必要とする別の操作を実行する)ことがあります。 この競合は、同じPDFドキュメント内の2つ以上の場所にSignatureField1[0]という名前が表示された結果です。 例えば、form1[0].Form1[0].SignatureField1[0]form1[0].Form1[0].SubForm1[0].SignatureField1[0]という2つの署名フィールドを含むPDFドキュメントで、SignatureField1[0]と指定するとします。 この場合、Signatureサービスは、ドキュメント内のすべての署名フィールドを繰り返し処理する間に、最初に見つかった署名フィールドに署名します。

PDFドキュメント内に複数の署名フィールドがある場合は、署名フィールドの完全名を指定することをお勧めします。 つまり、SignatureField1[0]の代わりにform1[0].Form1[0].SignatureField1[0]を指定します。

Signatureサービスを使用して、次のタスクを実行できます。

メモ

Signatureサービスについて詳しくは、『AEM Formsのサービスリファレンス』を参照してください。

署名フィールドの追加

電子署名は、署名のグラフィック表現を含むフォームフィールドである署名フィールドに表示されます。 署名フィールドは、表示または非表示に設定することができます。署名者は、既存の署名フィールドを使用するか、プログラムによって署名フィールドを追加することができます。 どちらの場合においても、PDF ドキュメントに署名できるようにするには、署名フィールドが存在している必要があります。

プログラムによって署名フィールドを追加するには、Signature サービス Java API や 署名 Web サービス API を使用します。1つのPDFドキュメントに複数の署名フィールドを追加できます。ただし、各署名フィールド名は一意である必要があります。

メモ

一部のPDFドキュメントタイプでは、プログラムによって署名フィールドを追加できません。 Signatureサービスと署名フィールドの追加について詳しくは、『AEM Formsのサービスリファレンス』を参照してください。

手順の概要

署名フィールドをPDFドキュメントに追加するには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. Signatureクライアントを作成します。
  3. 署名フィールドが追加されたPDFドキュメントを取得します。
  4. 署名フィールドを追加します。
  5. PDFドキュメントをPDFファイルとして保存します。

プロジェクトファイルを含める

必要なファイルを開発プロジェクトに含めます。 Javaを使用してクライアントアプリケーションを作成する場合は、必要なJARファイルを含めます。 Webサービスを使用する場合は、プロキシファイルを必ず含めてください。

次のJARファイルをプロジェクトのクラスパスに追加する必要があります。

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(AEM FormsをJBossにデプロイする場合に必要)
  • jbossall-client.jar(AEM FormsをJBossにデプロイする場合に必要)

Signatureクライアントの作成

Signatureサービスの操作をプログラムで実行する前に、Signatureサービスクライアントを作成する必要があります。

署名フィールドが追加されたPDFドキュメントの取得

署名フィールドを追加するPDFドキュメントを取得する必要があります。

署名フィールドの追加

PDFドキュメントに署名フィールドを正常に追加するには、署名フィールドの場所を識別する座標値を指定します。 (非表示の署名フィールドを追加する場合、これらの値は不要です)。 また、署名フィールドに署名が適用された後にロックされるPDFドキュメント内のフィールドを指定することもできます。

PDFドキュメントをPDFファイルとして保存

Signatureサービスで署名フィールドをPDFドキュメントに追加した後、そのドキュメントをPDFファイルとして保存して、AcrobatまたはAdobe Readerで開くことができます。

関連トピック

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

PDFドキュメントのデジタル署名

Java APIを使用した署名フィールドの追加

署名API(Java)を使用して署名フィールドを追加します。

  1. プロジェクトファイルを含める

    Javaプロジェクトのクラスパスに、adobe-signatures-client.jarなどのクライアントJARファイルを含めます。

  2. Signatureクライアントの作成

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクタを使用して SignatureServiceClient オブジェクトを渡すことによって、ServiceClientFactory オブジェクトを作成します。
  3. 署名フィールドが追加されたPDFドキュメントの取得

    • 署名フィールドが追加されるPDFドキュメントを表すjava.io.FileInputStreamオブジェクトを作成します。そのためには、コンストラクターを使用し、PDFドキュメントの場所を指定する文字列値を渡します。
    • コンストラクタを使用して com.adobe.idp.Document オブジェクトを渡すことによって、java.io.FileInputStream オブジェクトを作成します。
  4. 署名フィールドの追加

    • コンストラクターを使用して、署名フィールドの場所を指定するPositionRectangleオブジェクトを作成します。 コンストラクタ内で、座標値を指定します。

    • 必要に応じて、署名フィールドに電子署名が適用されたときにロックされるフィールドを指定するFieldMDPOptionsオブジェクトを作成します。

    • SignatureServiceClientオブジェクトのaddSignatureFieldメソッドを呼び出し、次の値を渡して、署名フィールドをPDFドキュメントに追加します。

      • A com.adobe.idp. Document 署名フィールドを追加するPDFドキュメントを表すオブジェクト。
      • 署名フィールドの名前を指定するstring値です。
      • 署名フィールドを追加するページ番号を表すjava.lang.Integer値です。
      • 署名フィールドの場所を指定するPositionRectangleオブジェクト。
      • 電子署名が署名フィールドに適用された後にロックされるPDFドキュメント内のフィールドを指定するFieldMDPOptionsオブジェクト。 このパラメーター値はオプションで、nullを渡すことができます。
    • 様々な実行時値を指定するPDFSeedValueOptionsオブジェクト。 このパラメーター値はオプションで、nullを渡すことができます。

      addSignatureFieldメソッドは、com.adobe.idpを返します。 Document 署名フィールドを含むPDFドキュメントを表すオブジェクト。

    メモ

    SignatureServiceClientオブジェクトのaddInvisibleSignatureFieldメソッドを呼び出して、非表示の署名フィールドを追加できます。

  5. PDFドキュメントをPDFファイルとして保存

    • java.io.File オブジェクトを作成し、ファイル拡張子が .pdf であることを確認します。
    • com.adobe.idpを呼び出します。 Document オブジェクトの copyToFile 内容をファイルにコピ Document ーするためのメソッド。必ずcom.adobe.idpを使用してください。 Document メソッドで返されたオブジ addSignatureField ェクト。

関連トピック

SignatureサービスAPIのクイックスタート

WebサービスAPIを使用した署名フィールドの追加

署名API(Webサービス)を使用して署名フィールドを追加するには:

  1. プロジェクトファイルを含める

    MTOMを使用するMicrosoft .NETプロジェクトを作成します。 次のWSDL定義を使用していることを確認します。http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1.

    メモ

    localhostを、AEM FormsをホストするサーバーのIPアドレスに置き換えます。

  2. Signatureクライアントの作成

    • デフォルトのコンストラクターを使用してSignatureServiceClientオブジェクトを作成します。

    • System.ServiceModel.EndpointAddressコンストラクターを使用してSignatureServiceClient.Endpoint.Addressオブジェクトを作成します。 AEM FormsサービスにWSDLを指定するstring値を渡します(例:http://localhost:8080/soap/services/SignatureService?WSDL)。 lc_version属性を使用する必要はありません。 この属性は、サービス参照を作成する際に使用されます)。

    • SignatureServiceClient.Endpoint.Bindingフィールドの値を取得してSystem.ServiceModel.BasicHttpBindingオブジェクトを作成します。 戻り値を BasicHttpBinding にキャストします。

    • System.ServiceModel.BasicHttpBindingオブジェクトのMessageEncodingフィールドをWSMessageEncoding.Mtomに設定します。 この値は、MTOMが使用されるようにします。

    • 次のタスクを実行して、基本的なHTTP認証を有効にします。

      • フィールドSignatureServiceClient.ClientCredentials.UserName.UserNameにAEM formsユーザー名を割り当てます。
      • 対応するパスワード値をフィールドSignatureServiceClient.ClientCredentials.UserName.Passwordに割り当てます。
      • フィールドBasicHttpBindingSecurity.Transport.ClientCredentialTypeに定数値HttpClientCredentialType.Basicを割り当てます。
      • フィールドBasicHttpBindingSecurity.Security.Modeに定数値BasicHttpSecurityMode.TransportCredentialOnlyを割り当てます。
  3. 署名フィールドが追加されたPDFドキュメントの取得

    • コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、署名フィールドを含むPDFドキュメントを保存するために使用されます。
    • コンストラクターを呼び出し、PDFドキュメントのファイルの場所とファイルを開くモードを表すstring値を渡して、System.IO.FileStreamオブジェクトを作成します。
    • System.IO.FileStreamオブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStreamオブジェクトのLengthプロパティを取得することで、バイト配列のサイズを判断できます。
    • System.IO.FileStreamオブジェクトのReadメソッドを呼び出し、読み取るバイト配列、開始位置、ストリーム長を渡すことによって、バイト配列にストリームデータを入力します。
    • BLOBオブジェクトのMTOMプロパティにバイト配列の内容を割り当てて、オブジェクトを設定します。
  4. 署名フィールドの追加

    SignatureServiceClientオブジェクトのaddSignatureFieldメソッドを呼び出し、次の値を渡して、署名フィールドをPDFドキュメントに追加します。

    • 署名フィールドを追加するPDFドキュメントを表すBLOBオブジェクト。
    • 署名フィールド名を指定するstring値です。
    • 署名フィールドを追加するページ番号を表すinteger値です。
    • 署名フィールドの場所を指定するPositionRectオブジェクト。
    • 電子署名が署名フィールドに適用された後にロックされるPDFドキュメント内のフィールドを指定するFieldMDPOptionsオブジェクト。 このパラメーター値はオプションで、nullを渡すことができます。
    • 様々な実行時値を指定するPDFSeedValueOptionsオブジェクト。 このパラメーター値はオプションで、nullを渡すことができます。

    addSignatureFieldメソッドは、署名フィールドを含むPDFドキュメントを表すBLOBオブジェクトを返します。

  5. PDFドキュメントをPDFファイルとして保存

    • コンストラクターを呼び出し、署名フィールドを含むPDFドキュメントのファイルの場所とファイルを開くモードを表すstring値を渡して、System.IO.FileStreamオブジェクトを作成します。
    • addSignatureFieldメソッドで返されたBLOBオブジェクトの内容を格納するバイト配列を作成します。 BLOBオブジェクトのbinaryDataデータメンバーの値を取得して、バイト配列を設定します。
    • コンストラクターを呼び出し、System.IO.FileStreamオブジェクトを渡して、System.IO.BinaryWriterオブジェクトを作成します。
    • System.IO.BinaryWriterオブジェクトのWriteメソッドを呼び出し、バイト配列を渡すことにより、バイト配列の内容をPDFファイルに書き込みます。

関連トピック

MTOMを使用したAEM Formsの呼び出し

SwaRefを使用したAEM Formsの呼び出し

署名フィールド名の取得

署名または認証する PDF ドキュメント内のすべての署名フィールドの名前を取得できます。PDF ドキュメント内の署名フィールド名が分からない場合や、名前を検証したい場合に、プログラムによって名前を取得することができます。Signatureサービスは、form1[0].grantApplication[0].page1[0].SignatureField1[0]などの署名フィールドの完全修飾名を返します。

メモ

Signatureサービスについて詳しくは、『AEM Formsのサービスリファレンス』を参照してください。

手順の概要

署名フィールド名を取得するには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. Signatureクライアントを作成します。
  3. 署名フィールドを含むPDFドキュメントを取得します。
  4. 署名フィールド名を取得します。

プロジェクトファイルを含める

必要なファイルを開発プロジェクトに含めます。 Javaを使用してクライアントアプリケーションを作成する場合は、必要なJARファイルを含めます。 Webサービスを使用する場合は、プロキシファイルを必ず含めてください。

次のJARファイルをプロジェクトのクラスパスに追加する必要があります。

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(AEM FormsをJBossにデプロイする場合に必要)
  • jbossall-client.jar(AEM FormsをJBossにデプロイする場合に必要)

これらのJARファイルの場所について詳しくは、「AEM Forms Javaライブラリファイルを含める」を参照してください。

Signatureクライアントの作成

Signatureサービスの操作をプログラムで実行する前に、Signatureサービスクライアントを作成する必要があります。

署名フィールドを含むPDFドキュメントを取得する

署名フィールドを含むPDFドキュメントを取得します。

署名フィールド名の取得

1つ以上の署名フィールドを含むPDFドキュメントを取得した後で、署名フィールド名を取得できます。

関連トピック

Java APIを使用した署名フィールド名の取得

WebサービスAPIを使用した署名フィールドの取得

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

署名フィールドの追加

Java APIを使用して署名フィールド名を取得する

署名API(Java)を使用して署名フィールド名を取得するには:

  1. プロジェクトファイルを含める

    Javaプロジェクトのクラスパスに、adobe-signatures-client.jarなどのクライアントJARファイルを含めます。

  2. Signatureクライアントの作成

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクタを使用して SignatureServiceClient オブジェクトを渡すことによって、ServiceClientFactory オブジェクトを作成します。
  3. 署名フィールドを含むPDFドキュメントを取得する

    • コンストラクターを使用して、PDFドキュメントの場所を指定する文字列値を渡すことで、署名フィールドを含むPDFドキュメントを表すjava.io.FileInputStreamオブジェクトを作成します。
    • コンストラクタを使用して com.adobe.idp.Document オブジェクトを渡すことによって、java.io.FileInputStream オブジェクトを作成します。
  4. 署名フィールド名の取得

    • SignatureServiceClientオブジェクトのgetSignatureFieldListメソッドを呼び出し、署名フィールドを含むPDFドキュメントを含むcom.adobe.idp.Documentオブジェクトを渡して、署名フィールド名を取得します。 このメソッドは、java.util.Listオブジェクトを返します。このオブジェクトでは、各要素にPDFSignatureFieldオブジェクトが含まれます。 このオブジェクトを使用すると、署名フィールドが表示されるかどうかなど、署名フィールドに関する追加情報を取得できます。
    • java.util.Listオブジェクトを繰り返し処理して、署名フィールド名があるかどうかを判断します。 PDFドキュメントの各署名フィールドに対して、個別のPDFSignatureFieldオブジェクトを取得できます。 署名フィールドの名前を取得するには、PDFSignatureFieldオブジェクトのgetNameメソッドを呼び出します。 このメソッドは、署名フィールド名を指定するstring値を返します。

関連トピック

署名フィールド名の取得

クイックスタート(SOAPモード):Java APIを使用した署名フィールド名の取得

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

WebサービスAPIを使用して署名フィールドを取得する

Signature API(Webサービス)を使用して署名フィールド名を取得します。

  1. プロジェクトファイルを含める

    MTOMを使用するMicrosoft .NETプロジェクトを作成します。 次のWSDL定義を使用していることを確認します。http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1.

    メモ

    localhostを、AEM FormsをホストするサーバーのIPアドレスに置き換えます。

  2. Signatureクライアントの作成

    • デフォルトのコンストラクターを使用してSignatureServiceClientオブジェクトを作成します。

    • System.ServiceModel.EndpointAddressコンストラクターを使用してSignatureServiceClient.Endpoint.Addressオブジェクトを作成します。 AEM FormsサービスにWSDLを指定するstring値を渡します(例:http://localhost:8080/soap/services/SignatureService?WSDL)。 lc_version属性を使用する必要はありません。 この属性は、サービス参照を作成する際に使用されます)。

    • SignatureServiceClient.Endpoint.Bindingフィールドの値を取得してSystem.ServiceModel.BasicHttpBindingオブジェクトを作成します。 戻り値を BasicHttpBinding にキャストします。

    • System.ServiceModel.BasicHttpBindingオブジェクトのMessageEncodingフィールドをWSMessageEncoding.Mtomに設定します。 この値は、MTOMが使用されるようにします。

    • 次のタスクを実行して、基本的なHTTP認証を有効にします。

      • フィールドSignatureServiceClient.ClientCredentials.UserName.UserNameにAEM formsユーザー名を割り当てます。
      • 対応するパスワード値をフィールドSignatureServiceClient.ClientCredentials.UserName.Passwordに割り当てます。
      • フィールドBasicHttpBindingSecurity.Transport.ClientCredentialTypeに定数値HttpClientCredentialType.Basicを割り当てます。
      • フィールドBasicHttpBindingSecurity.Security.Modeに定数値BasicHttpSecurityMode.TransportCredentialOnlyを割り当てます。
  3. 署名フィールドを含むPDFドキュメントを取得する

    • コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、署名フィールドを含むPDFドキュメントを保存するために使用されます。
    • コンストラクターを呼び出し、PDFドキュメントのファイルの場所とファイルを開くモードを表すstring値を渡して、System.IO.FileStreamオブジェクトを作成します。
    • System.IO.FileStreamオブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStreamオブジェクトのLengthプロパティを取得することで、バイト配列のサイズを判断できます。
    • System.IO.FileStreamオブジェクトのReadメソッドを呼び出し、読み取るバイト配列、開始位置、ストリーム長を渡すことによって、バイト配列にストリームデータを入力します。
    • BLOBオブジェクトのMTOMフィールドにバイト配列の内容を割り当てて、オブジェクトを設定します。
  4. 署名フィールド名の取得

    • SignatureServiceClientオブジェクトのgetSignatureFieldListメソッドを呼び出し、署名フィールドを含むPDFドキュメントを含むBLOBオブジェクトを渡して、署名フィールド名を取得します。 このメソッドは、 MyArrayOfPDFSignatureFieldコレクションオブジェクトを返します。各要素にはPDFSignatureFieldオブジェクトが含まれます。
    • MyArrayOfPDFSignatureFieldオブジェクトを繰り返し処理して、署名フィールド名があるかどうかを判断します。 PDFドキュメントの各署名フィールドに対して、PDFSignatureFieldオブジェクトを取得できます。 署名フィールドの名前を取得するには、PDFSignatureFieldオブジェクトのgetNameメソッドを呼び出します。 このメソッドは、署名フィールド名を指定するstring値を返します。

関連トピック

署名フィールド名の取得

MTOMを使用したAEM Formsの呼び出し

SwaRefを使用したAEM Formsの呼び出し

署名フィールドの変更

Java APIとWebサービスAPIを使用して、PDFドキュメント内の署名フィールドを変更できます。 署名フィールドの署名フィールドロックディクショナリまたはシード値ディクショナリの値を操作することで署名フィールドを変更します。

フィールドロックディクショナリ​は、署名フィールドが署名されたときにロックされるフィールドのリストを指定します。 フィールドがロックされると、ユーザーはフィールドを変更できません。シード値ディクショナリ​には、署名の適用時に使用される制約情報が格納されます。 例えば、署名を無効にすることなく実行できるアクションを制御する権限設定を変更することができます。

既存の署名フィールドを変更することで、ビジネス要件の変更を反映するようにPDFドキュメントを変更できます。 例えば、新しいビジネス要件では、ドキュメントの署名後にすべてのドキュメントフィールドをロックする必要が生じる場合があります。

この節では、フィールドロック辞書とシード値辞書の値の両方を変更して署名フィールドを変更する方法について説明します。 署名フィールドロックディクショナリに変更を加えると、署名フィールドに署名したときに、PDFドキュメント内のすべてのフィールドがロックされます。 シード値ディクショナリに変更を加えると、ドキュメントに対する特定の種類の変更が禁止されます。

メモ

Signatureサービスと署名フィールドの変更について詳しくは、『AEM Formsのサービスリファレンス』を参照してください。

手順の概要

PDFドキュメント内の署名フィールドを変更するには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. Signatureクライアントを作成します。
  3. 変更する署名フィールドを含むPDFドキュメントを取得します。
  4. 辞書の値を設定します。
  5. 署名フィールドを変更します。
  6. PDFドキュメントをPDFファイルとして保存します。

プロジェクトファイルを含める

必要なファイルを開発プロジェクトに含めます。 Javaを使用してクライアントアプリケーションを作成する場合は、必要なJARファイルを含めます。 Webサービスを使用する場合は、プロキシファイルを必ず含めてください。

次のJARファイルをプロジェクトのクラスパスに追加する必要があります。

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(AEM FormsをJBossにデプロイする場合に必要)
  • jbossall-client.jar(AEM FormsをJBossにデプロイする場合に必要)

これらのJARファイルの場所について詳しくは、「LiveCycleJavaライブラリファイルを含める」を参照してください。

Signatureクライアントの作成

Signatureサービスの操作をプログラムで実行する前に、Signatureサービスクライアントを作成する必要があります。

変更する署名フィールドを含むPDFドキュメントを取得します

変更する署名フィールドを含むPDFドキュメントを取得します。

辞書値の設定

署名フィールドを変更するには、そのフィールドロックディクショナリまたはシード値ディクショナリに値を割り当てます。 署名フィールドロックディクショナリ値の指定では、署名フィールドの署名時にロックされるPDFドキュメントフィールドを指定する必要があります。 (この節では、すべてのフィールドをロックする方法について説明します)。

次のシード値ディクショナリ値を設定できます。

  • リビジョンチェック:署名フィールドに署名が適用された場合に失効確認を実行するかどうかを指定します。

  • 証明書オプション:証明書のシード値ディクショナリに値を割り当てます。証明書のオプションを指定する前に、証明書のシード値ディクショナリについて理解しておくことをお勧めします。 (PDFリファレンスを参照)。

  • ダイジェストオプション:署名に使用するダイジェストアルゴリズムを割り当てます。有効な値は、SHA1、SHA256、SHA384、SHA512、RIPEMD160です。

  • フィルター:署名フィールドで使用するフィルターを指定します。例えば、Adobe.PPKLiteフィルターを使用できます。 (PDFリファレンスを参照)。

  • フラグオプション:この署名フィールドに関連付けるフラグ値を指定します。値が1の場合、署名者は指定された値のみをエントリに使用する必要があります。 値0は、他の値が許可されることを意味します。 ビット位置は次のとおりです。

    • 1(Filter): 署名フィールドへの署名に使用する署名ハンドラーです
    • 2(SubFilter): 署名時に使用する有効なエンコードを示す名前の配列
    • 3 (V):署名フィールドへの署名に使用する署名ハンドラーの必要最小限のバージョン番号です
    • 4(理由): ドキュメントに署名する理由を指定する文字列の配列
    • 5(PDFLegalWarnings): 可能な法的証明を指定する文字列の配列
  • 法的証明:ドキュメントを認証すると、ドキュメントの表示されるコンテンツをあいまいにしたり、紛らわしくしたりする可能性のある特定の種類のコンテンツを自動的にスキャンします。例えば、注釈によって、認証対象を理解する上で重要なテキストが難読化される場合があります。 スキャン処理により、このタイプのコンテンツが存在することを示す警告が生成されます。 また、警告が生成された可能性のあるコンテンツの追加説明も提供されます。

  • 権限:署名を無効にせずにPDFドキュメントで使用できる権限を指定します。

  • 理由:このドキュメントに署名する理由を指定します。

  • タイムスタンプ:タイムスタンプオプションを指定します。例えば、使用するタイムスタンプサーバーのURLを設定できます。

  • バージョン:署名フィールドへの署名に使用する署名ハンドラーの最小バージョン番号を指定します。

署名フィールドの変更

Signatureサービスクライアントを作成し、変更する署名フィールドを含むPDFドキュメントを取得して辞書値を設定した後、Signatureサービスに署名フィールドを変更するように指示できます。 次に、Signatureサービスは、変更された署名フィールドを含むPDFドキュメントを返します。 元のPDFドキュメントは影響を受けません。

PDFドキュメントをPDFファイルとして保存

ユーザーがAcrobatまたはAdobe Readerで開けるように、変更された署名フィールドを含むPDFドキュメントをPDFファイルとして保存します。

関連トピック

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

SignatureサービスAPIのクイックスタート

PDFドキュメントのデジタル署名

Java APIを使用した署名フィールドの変更

署名API(Java)を使用して署名フィールドを変更します。

  1. プロジェクトファイルを含める

    Javaプロジェクトのクラスパスに、adobe-signatures-client.jarなどのクライアントJARファイルを含めます。

  2. Signatureクライアントの作成

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクタを使用して SignatureServiceClient オブジェクトを渡すことによって、ServiceClientFactory オブジェクトを作成します。
  3. 変更する署名フィールドを含むPDFドキュメントを取得します

    • コンストラクターを使用して、PDFドキュメントの場所を指定する文字列値を渡すことで、変更する署名フィールドを含むPDFドキュメントを表すjava.io.FileInputStreamオブジェクトを作成します。
    • コンストラクタを使用して com.adobe.idp.Document オブジェクトを渡すことによって、java.io.FileInputStream オブジェクトを作成します。
  4. 辞書値の設定

    • コンストラクタを使用して PDFSignatureFieldProperties オブジェクトを作成します。PDFSignatureFieldPropertiesオブジェクトは、署名フィールドロックディクショナリとシード値ディクショナリ情報を格納します。
    • コンストラクタを使用して PDFSeedValueOptionSpec オブジェクトを作成します。このオブジェクトを使用すると、シード値ディクショナリの値を設定できます。
    • PDFSeedValueOptionSpecオブジェクトのsetMdpValueメソッドを呼び出し、MDPPermissions.NoChanges列挙値を渡すことで、PDFドキュメントの変更を許可しない。
    • コンストラクタを使用して FieldMDPOptionSpec オブジェクトを作成します。このオブジェクトを使用すると、署名フィールドロックディクショナリの値を設定できます。
    • FieldMDPOptionSpecオブジェクトのsetMdpValueメソッドを呼び出し、FieldMDPAction.ALL列挙値を渡すことで、PDFドキュメント内のすべてのフィールドをロックします。
    • PDFSignatureFieldPropertiesオブジェクトのsetSeedValueメソッドを呼び出し、PDFSeedValueOptionSpecオブジェクトを渡すことで、シード値ディクショナリ情報を設定します。
    • PDFSignatureFieldPropertiesオブジェクトのsetFieldMDPメソッドを呼び出し、FieldMDPOptionSpecオブジェクトを渡すことで、署名フィールドロックディクショナリ情報を設定します。
    メモ

    設定できるすべてのシード値ディクショナリ値を確認するには、PDFSeedValueOptionSpecクラス参照を参照してください。 (『AEM Forms APIリファレンス🔗』を参照)。

  5. 署名フィールドの変更

    SignatureServiceClientオブジェクトのmodifySignatureFieldメソッドを呼び出し、次の値を渡して署名フィールドを変更します。

    • 変更する署名フィールドを含むPDFドキュメントを格納するcom.adobe.idp.Documentオブジェクト
    • 署名フィールドの名前を指定するstring値です
    • 署名フィールドロックディクショナリとシード値ディクショナリ情報を格納するPDFSignatureFieldPropertiesオブジェクト

    modifySignatureFieldメソッドは、変更された署名フィールドを含むPDFドキュメントを保存するcom.adobe.idp.Documentオブジェクトを返します。

  6. PDFドキュメントをPDFファイルとして保存

    • java.io.Fileオブジェクトを作成し、ファイル名拡張子が.pdfであることを確認します。
    • com.adobe.idp.DocumentオブジェクトのcopyToFileメソッドを呼び出して、com.adobe.idp.Documentオブジェクトの内容をファイルにコピーします。 modifySignatureFieldメソッドが返すcom.adobe.idp.Documentオブジェクトを使用していることを確認します。

WebサービスAPIを使用して署名フィールドを変更します

署名API(Webサービス)を使用して署名フィールドを変更します。

  1. プロジェクトファイルを含める

    MTOMを使用するMicrosoft .NETプロジェクトを作成します。 次のWSDL定義を使用していることを確認します。http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1.

    メモ

    localhostを、AEM FormsをホストするサーバーのIPアドレスに置き換えます。

  2. Signatureクライアントの作成

    • デフォルトのコンストラクターを使用してSignatureServiceClientオブジェクトを作成します。

    • System.ServiceModel.EndpointAddressコンストラクターを使用してSignatureServiceClient.Endpoint.Addressオブジェクトを作成します。 AEM FormsサービスにWSDLを指定するstring値を渡します(例:http://localhost:8080/soap/services/SignatureService?WSDL)。 lc_version属性を使用する必要はありません。 この属性は、サービス参照を作成する際に使用されます)。

    • SignatureServiceClient.Endpoint.Bindingフィールドの値を取得してSystem.ServiceModel.BasicHttpBindingオブジェクトを作成します。 戻り値を BasicHttpBinding にキャストします。

    • System.ServiceModel.BasicHttpBindingオブジェクトのMessageEncodingフィールドをWSMessageEncoding.Mtomに設定します。 この値は、MTOMが使用されるようにします。

    • 次のタスクを実行して、基本的なHTTP認証を有効にします。

      • フィールドSignatureServiceClient.ClientCredentials.UserName.UserNameにAEM formsユーザー名を割り当てます。
      • 対応するパスワード値をフィールドSignatureServiceClient.ClientCredentials.UserName.Passwordに割り当てます。
      • フィールドBasicHttpBindingSecurity.Transport.ClientCredentialTypeに定数値HttpClientCredentialType.Basicを割り当てます。
      • フィールドBasicHttpBindingSecurity.Security.Modeに定数値BasicHttpSecurityMode.TransportCredentialOnlyを割り当てます。
  3. 変更する署名フィールドを含むPDFドキュメントを取得します

    • コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、変更する署名フィールドを含むPDFドキュメントを保存するために使用されます。
    • コンストラクターを呼び出し、PDFドキュメントのファイルの場所とファイルを開くモードを表すstring値を渡して、System.IO.FileStreamオブジェクトを作成します。
    • System.IO.FileStreamオブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStreamオブジェクトのLengthプロパティを取得することで、バイト配列のサイズを判断できます。
    • System.IO.FileStreamオブジェクトのReadメソッドを呼び出し、読み取るバイト配列、開始位置、ストリーム長を渡すことによって、バイト配列にストリームデータを入力します。
    • BLOBオブジェクトのMTOMプロパティにバイト配列の内容を割り当てて、オブジェクトを設定します。
  4. 辞書値の設定

    • コンストラクタを使用して PDFSignatureFieldProperties オブジェクトを作成します。このオブジェクトは、署名フィールドロックディクショナリとシード値ディクショナリ情報を格納します。
    • コンストラクタを使用して PDFSeedValueOptionSpec オブジェクトを作成します。このオブジェクトを使用すると、シード値ディクショナリの値を設定できます。
    • MDPPermissions.NoChanges列挙値をPDFSeedValueOptionSpecオブジェクトのmdpValueデータメンバーに割り当てて、PDFドキュメントの変更を許可しない。
    • コンストラクタを使用して FieldMDPOptionSpec オブジェクトを作成します。このオブジェクトを使用すると、署名フィールドロックディクショナリの値を設定できます。
    • FieldMDPAction.ALL列挙値をFieldMDPOptionSpecオブジェクトのmdpValueデータメンバーに割り当てて、PDFドキュメント内のすべてのフィールドをロックします。
    • PDFSeedValueOptionSpecオブジェクトをPDFSignatureFieldPropertiesオブジェクトのseedValueデータメンバーに割り当てて、シード値ディクショナリ情報を設定します。
    • FieldMDPOptionSpecオブジェクトをPDFSignatureFieldPropertiesオブジェクトのfieldMDPデータメンバに割り当てて、署名フィールドロックディクショナリ情報を設定します。
    メモ

    設定できるすべてのシード値ディクショナリ値を確認するには、PDFSeedValueOptionSpecクラス参照を参照してください。 (『AEM Forms APIリファレンス』を参照)。

  5. 署名フィールドの変更

    SignatureServiceClientオブジェクトのmodifySignatureFieldメソッドを呼び出し、次の値を渡して署名フィールドを変更します。

    • 変更する署名フィールドを含むPDFドキュメントを格納するBLOBオブジェクト
    • 署名フィールドの名前を指定するstring値です
    • 署名フィールドロックディクショナリとシード値ディクショナリ情報を格納するPDFSignatureFieldPropertiesオブジェクト

    modifySignatureFieldメソッドは、変更された署名フィールドを含むPDFドキュメントを保存するBLOBオブジェクトを返します。

  6. PDFドキュメントをPDFファイルとして保存

    • コンストラクターを呼び出し、署名フィールドを含むPDFドキュメントのファイルの場所と、ファイルを開くモードを表すstring値を渡して、System.IO.FileStreamオブジェクトを作成します。
    • addSignatureFieldメソッドが返すBLOBオブジェクトの内容を格納するバイト配列を作成します。 BLOBオブジェクトのMTOMデータメンバーの値を取得して、バイト配列を設定します。
    • コンストラクターを呼び出し、System.IO.FileStreamオブジェクトを渡して、System.IO.BinaryWriterオブジェクトを作成します。
    • System.IO.BinaryWriterオブジェクトのWriteメソッドを呼び出し、バイト配列を渡すことにより、バイト配列の内容をPDFファイルに書き込みます。

関連トピック

MTOMを使用したAEM Formsの呼び出し

SwaRefを使用したAEM Formsの呼び出し

PDFドキュメントのデジタル署名

セキュリティレベルの提供のため、PDF に電子署名を適用することができます。手書き署名のような電子署名は、署名者を識別したり、ドキュメントに関するステートメントを作成する手段として使用できます。ドキュメントの電子署名に使用されている技術は、署名者と受信者の両方が、何に署名されているのかを明確にし、その署名によりドキュメントに変更がないことを確認するのに役立ちます。

PDF ドキュメントは、公開鍵を用いて署名されます。署名者は公開鍵と秘密鍵の 2 つの鍵を持っています。秘密鍵は、署名時に使用可能にする必要があるユーザーの資格情報に保存されます。 公開鍵はユーザーの証明書に保存されます。この証明書は、受信者が署名を検証するために使用できる必要があります。 失効した証明書に関する情報は、認証機関から配布される証明書失効リスト(CRL)およびオンライン証明書ステータスプロトコル(OCSP)応答内にあります。署名が行われた時間は、タイムスタンプ局として知られる信頼できるソースから取得されます。

メモ

PDFドキュメントに電子署名を行う前に、証明書がAEM Formsに追加されていることを確認する必要があります。 証明書は、管理コンソールを使用して、またはTrust Manager APIを使用してプログラムで追加されます。 (Trust Manager APIを使用した秘密鍵証明書の読み込みを参照)。

PDFドキュメントにプログラムでデジタル署名することができます。 PDFドキュメントに電子署名する場合は、AEM Formsに存在するセキュリティ証明書を参照する必要があります。 証明書は署名に使用する秘密鍵となります。

Signatureサービスは、PDFドキュメントに署名する際に、次の手順を実行します。

  1. Signatureサービスは、要求で指定されたエイリアスを渡すことで、Truststoreから秘密鍵証明書を取得します。
  2. Truststoreは、指定された秘密鍵証明書を検索します。
  3. 秘密鍵証明書はSignatureサービスに返され、ドキュメントの署名に使用されます。 また、証明書は、今後の要求でエイリアスに対してキャッシュされます。

セキュリティ証明書の処理について詳しくは、使用しているアプリケーションサーバー版の『AEM Forms のインストールとデプロイ』ガイドを参照してください。

メモ

ドキュメントの署名と認証には、違いがあります。 (PDFドキュメントの認証を参照)。

メモ

署名をサポートしていないPDFドキュメントもあります。 Signatureサービスとドキュメントのデジタル署名について詳しくは、『AEM Formsのサービスリファレンス』を参照してください。

メモ

Signatureサービスは、PDFデータが埋め込まれたXDPファイルを操作の入力として使用すること(ドキュメントの認証など)を可能にしません。 この操作を実行すると、SignatureサービスでPDFOperationExceptionがスローされます。 この問題を解決するには、PDF Utilitiesサービスを使用してXDPファイルをPDFファイルに変換し、変換したPDFファイルをSignatureサービス操作に渡します。 (PDFユーティリティの操作を参照)。

nCipher nShield HSM秘密鍵証明書

PDFドキュメントの署名や認証にnCipher nShield HSM秘密鍵証明書を使用する場合、AEM FormsがデプロイされているJ2EEアプリケーションサーバーが再起動されるまで、新しい秘密鍵証明書は使用できません。 ただし、設定値を設定すると、J2EEアプリケーションサーバーを再起動しなくても署名または認証の操作が機能します。

次の設定値をcknfastrcファイルに追加できます。このファイルは/opt/nfast/cknfastrc(またはc:\nfast\cknfastrc)にあります。

    CKNFAST_ASSUME_SINGLE_PROCESS=0

この設定値をcknfastrcファイルに追加すると、J2EEアプリケーションサーバーを再起動しなくても、新しい秘密鍵証明書を使用できます。

署名は信頼されていません

同じPDFドキュメントを認証および署名する際に、認証署名が信頼されていない場合、AcrobatまたはAdobe ReaderでPDFドキュメントを開くと、最初の署名に対して黄色い三角形が表示されます。 この状況を避けるには、認証署名を信頼する必要があります。

XFAベースのフォームでドキュメントに署名する

SignatureサービスAPIを使用してXFAベースのフォームに署名しようとすると、AcrobatにあるView Signed Versionにデータがない場合があります。 例えば、次のワークフローについて考えてみます。

  • Designerを使用して作成されたXDPファイルを使用して、署名フィールドを含むフォームデザインと、フォームデータを含むXMLデータを結合します。 Formsサービスを使用してインタラクティブPDFドキュメントを生成します。
  • PDFドキュメントに署名するには、SignatureサービスAPIを使用します。

手順の概要

PDFドキュメントに電子署名を行うには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. Signatureサービスクライアントを作成します。
  3. 署名するPDFドキュメントを取得します。
  4. PDFドキュメントに署名します。
  5. 署名済みPDFドキュメントをPDFファイルとして保存します。

プロジェクトファイルを含める

必要なファイルを開発プロジェクトに含めます。 Javaを使用してクライアントアプリケーションを作成する場合は、必要なJARファイルを含めます。 Webサービスを使用する場合は、プロキシファイルを必ず含めてください。

次のJARファイルをプロジェクトのクラスパスに追加する必要があります。

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(AEM FormsをJBossにデプロイする場合に必要)
  • jbossall-client.jar(AEM FormsをJBossにデプロイする場合に必要)

Signaturesクライアントの作成

Signatureサービスの操作をプログラムで実行する前に、Signatureサービスクライアントを作成する必要があります。

署名するPDFドキュメントを取得する

PDFドキュメントに署名するには、署名フィールドを含むPDFドキュメントを取得する必要があります。 PDFドキュメントに署名フィールドが含まれていない場合、署名できません。 署名フィールドは、Designerを使用するか、プログラムを使用して追加できます。

PDFドキュメントに署名

PDFドキュメントに署名する際に、Signatureサービスで使用する実行時オプションを設定できます。 以下のオプションを設定できます。

  • 外観オプション
  • 失効確認
  • タイムスタンプ値

PDFSignatureAppearanceOptionSpecオブジェクトを使用して外観オプションを設定します。 例えば、PDFSignatureAppearanceOptionSpecオブジェクトのsetShowDateメソッドを呼び出してtrueを渡すことで、署名内に日付を表示できます。

また、PDFドキュメントのデジタル署名に使用される証明書が失効したかどうかを判断する失効確認を実行するかどうかを指定することもできます。 失効確認を実行するには、次のいずれかの値を指定します。

  • NoCheck:失効確認を実行しない。
  • BestEffort:常に、チェーン内のすべての証明書の失効を確認しようとします。チェック中に問題が発生した場合、失効は有効と見なされます。 エラーが発生した場合は、証明書が失効していないと仮定します。
  • CheckIfAvailable: 失効情報が利用可能な場合、チェーン内のすべての証明書の失効を確認します。チェック中に問題が発生した場合、失効は無効と見なされます。 エラーが発生した場合は、証明書が失効し、無効であると仮定します。 (これはデフォルト値です)。
  • AlwaysCheck:チェーン内のすべての証明書の失効を確認します。どの証明書にも失効情報が存在しない場合、失効は無効と見なされます。

証明書に対して失効確認を実行するには、CRLOptionSpecオブジェクトを使用して、証明書失効リスト(CRL)サーバーへのURLを指定します。 ただし、失効確認を実行する場合に、CRLサーバーへのURLを指定しないと、Signatureサービスは証明書からURLを取得します。

失効確認を実行する際に、CRLサーバーを使用する代わりに、オンライン証明書ステータスプロトコル(OCSP)サーバーを使用できます。 通常、CRLサーバーとは異なりOCSPサーバーを使用する場合は、失効確認の実行が高速になります。 (https://tools.ietf.org/html/rfc2560の「オンライン証明書ステータスプロトコル」を参照)。

Signatureサービスがアプリケーションおよびサービスを使用して使用するCRLおよびOCSPAdobeの順序を設定できます。 例えば、AdobeのアプリケーションとサービスでOCSPサーバーを最初に設定した場合、OCSPサーバーをチェックし、次にCRLサーバーをチェックします。 (AACヘルプの「Trust Storeを使用した証明書と秘密鍵証明書の管理」を参照)。

失効確認を実行しないように指定した場合、Signatureサービスは、ドキュメントの署名または認証に使用された証明書が失効したかどうかを確認しません。 つまり、CRLおよびOCSPサーバー情報は無視されます。

メモ

証明書にはCRLまたはOCSPサーバーが指定されていても、CRLOptionSpecOCSPOptionSpecオブジェクトを使用して、証明書で指定されたURLを上書きできます。 例えば、CRLサーバーを上書きするには、CRLOptionSpecオブジェクトのsetLocalURIメソッドを呼び出します。

タイムスタンプとは、署名済みまたは認証済みのドキュメントが変更された時間を追跡するプロセスを指します。 ドキュメントの署名後は、ドキュメントの所有者でもドキュメントを変更しないでください。 タイムスタンプは、署名済みまたは認証済みのドキュメントの有効性を強化するのに役立ちます。 TSPOptionSpecオブジェクトを使用して、タイムスタンプオプションを設定できます。 例えば、タイムスタンププロバイダー(TSP)サーバーのURLを指定できます。

メモ

JavaおよびWebサービスの各セクションおよび対応するクイックスタートでは、失効確認が使用されます。 CRLまたはOCSPサーバー情報が指定されていないので、PDFドキュメントのデジタル署名に使用される証明書からサーバー情報が取得されます。

PDFドキュメントに正常に署名するには、form1[0].#subform[1].SignatureField3[3]などの電子署名を含める署名フィールドの完全修飾名を指定します。 XFAフォームフィールドを使用する場合は、署名フィールドの名前の一部を使用することもできます。SignatureField3[3].

PDFドキュメントに電子署名を行うには、セキュリティ証明書も参照する必要があります。 セキュリティ証明書を参照するには、エイリアスを指定します。 エイリアスは、PKCS#12ファイル(拡張子に.pfxを持つ)またはハードウェアセキュリティモジュール(HSM)に含まれる可能性がある、実際の秘密鍵証明書への参照です。 セキュリティ証明書について詳しくは、使用しているアプリケーションサーバー版の『AEM Forms のインストールとデプロイ』ガイドを参照してください。

署名済みPDFドキュメントを保存する

SignatureサービスがPDFドキュメントに電子署名を行った後、PDFファイルとして保存し、AcrobatまたはAdobe Readerで開くことができます。

関連トピック

Java APIを使用したPDFドキュメントのデジタル署名

WebサービスAPIを使用したPDFドキュメントのデジタル署名

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

署名フィールドの追加

署名フィールド名の取得

Java APIを使用してPDFドキュメントにデジタル署名する

署名API(Java)を使用してPDFドキュメントに電子署名を行う:

  1. プロジェクトファイルを含める

    Javaプロジェクトのクラスパスに、adobe-signatures-client.jarなどのクライアントJARファイルを含めます。

  2. Signaturesクライアントの作成

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクタを使用して SignatureServiceClient オブジェクトを渡すことによって、ServiceClientFactory オブジェクトを作成します。
  3. 署名するPDFドキュメントを取得する

    • コンストラクターを使用し、PDFドキュメントの場所を指定する文字列値を渡すことで、デジタル署名するPDFドキュメントを表すjava.io.FileInputStreamオブジェクトを作成します。
    • コンストラクタを使用して com.adobe.idp.Document オブジェクトを渡すことによって、java.io.FileInputStream オブジェクトを作成します。
  4. PDFドキュメントに署名

    SignatureServiceClientオブジェクトのsignメソッドを呼び出し、次の値を渡してPDFドキュメントに署名します。

    • 署名するPDFドキュメントを表すcom.adobe.idp.Documentオブジェクト。
    • 電子署名を含む署名フィールドの名前を表すstring値です。
    • PDFドキュメントのデジタル署名に使用される秘密鍵証明書を表すCredentialオブジェクト。 Credentialオブジェクトの静的なgetInstanceメソッドを呼び出し、セキュリティ証明書に対応するエイリアス値を指定する文字列値を渡して、Credentialオブジェクトを作成します。
    • PDFドキュメントのダイジェストを作成する際に使用するハッシュアルゴリズムを表す静的データメンバーを指定するHashAlgorithmオブジェクトです。 例えば、SHA1アルゴリズムを使用するようにHashAlgorithm.SHA1を指定できます。
    • PDFドキュメントが電子署名された理由を表すstring値です。
    • 署名者の連絡先情報を表すstring値です。
    • デジタル署名の外観を制御するPDFSignatureAppearanceOptionsオブジェクト。 例えば、このオブジェクトを使用して、電子署名にカスタムロゴを追加できます。
    • 署名者の証明書に対して失効確認を実行するかどうかを指定するjava.lang.Booleanオブジェクトです。
    • オンライン証明書ステータスプロトコル(OCSP)サポートの環境設定を格納するOCSPOptionSpecオブジェクト。 失効確認が行われない場合、このパラメーターは使用されず、nullを指定できます。
    • 証明書失効リスト(CRL)の環境設定を格納するCRLPreferencesオブジェクトです。 失効確認が行われない場合、このパラメーターは使用されず、nullを指定できます。
    • タイムスタンププロバイダー(TSP)サポートの環境設定を格納するTSPPreferencesオブジェクト。 このパラメーターはオプションで、nullを指定できます。 詳しくは、「AEM Forms APIリファレンス」を参照してください。

    signメソッドは、署名済みPDFドキュメントを表すcom.adobe.idp.Documentオブジェクトを返します。

  5. 署名済みPDFドキュメントを保存する

    • java.io.File オブジェクトを作成し、ファイル拡張子が .pdf であることを確認します。
    • com.adobe.idp.DocumentオブジェクトのcopyToFileメソッドを呼び出し、java.io.Fileを渡してDocumentオブジェクトの内容をファイルにコピーします。 com.adobe.idp.Document メソッドから返された sign オブジェクトを必ず使用してください。

関連トピック

PDFドキュメントのデジタル署名

クイックスタート(SOAPモード):Java APIを使用したPDFドキュメントのデジタル署名

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

WebサービスAPIを使用したPDFドキュメントのデジタル署名

署名API(Webサービス)を使用してPDFドキュメントに電子署名するには:

  1. プロジェクトファイルを含める

    MTOMを使用するMicrosoft .NETプロジェクトを作成します。 次のWSDL定義を使用していることを確認します。http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1.

    メモ

    localhostを、AEM FormsをホストするサーバーのIPアドレスに置き換えます。

  2. Signaturesクライアントの作成

    • デフォルトのコンストラクターを使用してSignatureServiceClientオブジェクトを作成します。

    • System.ServiceModel.EndpointAddressコンストラクターを使用してSignatureServiceClient.Endpoint.Addressオブジェクトを作成します。 AEM FormsサービスにWSDLを指定するstring値を渡します(例:http://localhost:8080/soap/services/SignatureService?WSDL)。 lc_version属性を使用する必要はありません。 この属性は、サービス参照を作成する際に使用されます)。

    • SignatureServiceClient.Endpoint.Bindingフィールドの値を取得してSystem.ServiceModel.BasicHttpBindingオブジェクトを作成します。 戻り値を BasicHttpBinding にキャストします。

    • System.ServiceModel.BasicHttpBindingオブジェクトのMessageEncodingフィールドをWSMessageEncoding.Mtomに設定します。 この値は、MTOMが使用されるようにします。

    • 次のタスクを実行して、基本的なHTTP認証を有効にします。

      • フィールドSignatureServiceClient.ClientCredentials.UserName.UserNameにAEM formsユーザー名を割り当てます。
      • 対応するパスワード値をフィールドSignatureServiceClient.ClientCredentials.UserName.Passwordに割り当てます。
      • フィールドBasicHttpBindingSecurity.Transport.ClientCredentialTypeに定数値HttpClientCredentialType.Basicを割り当てます。
      • フィールドBasicHttpBindingSecurity.Security.Modeに定数値BasicHttpSecurityMode.TransportCredentialOnlyを割り当てます。
  3. 署名するPDFドキュメントを取得する

    • コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、署名されたPDFドキュメントを保存するために使用されます。
    • コンストラクターを呼び出し、署名するPDFドキュメントのファイルの場所と、ファイルを開くモードを表すstring値を渡して、System.IO.FileStreamオブジェクトを作成します。
    • System.IO.FileStreamオブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStreamオブジェクトのLengthプロパティを取得することで、バイト配列のサイズを判断できます。
    • System.IO.FileStreamオブジェクトのReadメソッドを呼び出し、読み取るバイト配列、開始位置、ストリーム長を渡すことによって、バイト配列にストリームデータを入力します。
    • BLOBオブジェクトのMTOMプロパティにバイト配列の内容を割り当てて、オブジェクトを設定します。
  4. PDFドキュメントに署名

    SignatureServiceClientオブジェクトのsignメソッドを呼び出し、次の値を渡してPDFドキュメントに署名します。

    • 署名するPDFドキュメントを表すBLOBオブジェクト。
    • 電子署名を含む署名フィールドの名前を表すstring値です。
    • PDFドキュメントのデジタル署名に使用される秘密鍵証明書を表すCredentialオブジェクト。 コンストラクターを使用してCredentialオブジェクトを作成し、Credentialオブジェクトのaliasプロパティに値を割り当ててエイリアスを指定します。
    • PDFドキュメントのダイジェストを作成する際に使用するハッシュアルゴリズムを表す静的データメンバーを指定するHashAlgorithmオブジェクトです。 例えば、SHA1アルゴリズムを使用するようにHashAlgorithm.SHA1を指定できます。
    • ハッシュアルゴリズムを使用するかどうかを指定するBoolean値です。
    • PDFドキュメントが電子署名された理由を表すstring値です。
    • 署名者の場所を表すstring値です。
    • 署名者の連絡先情報を表すstring値です。
    • デジタル署名の外観を制御するPDFSignatureAppearanceOptionsオブジェクト。 例えば、このオブジェクトを使用して、電子署名にカスタムロゴを追加できます。
    • 署名者の証明書に対して失効確認を実行するかどうかを指定するSystem.Booleanオブジェクトです。 この失効確認が行われると、署名に埋め込まれます。 デフォルトは、false です。
    • オンライン証明書ステータスプロトコル(OCSP)サポートの環境設定を格納するOCSPOptionSpecオブジェクト。 失効確認が行われない場合、このパラメーターは使用されず、nullを指定できます。 このオブジェクトについて詳しくは、『AEM Forms APIリファレンス🔗』を参照してください。
    • 証明書失効リスト(CRL)の環境設定を格納するCRLPreferencesオブジェクトです。 失効確認が行われない場合、このパラメーターは使用されず、nullを指定できます。
    • タイムスタンププロバイダー(TSP)サポートの環境設定を格納するTSPPreferencesオブジェクト。 このパラメーターはオプションで、nullを指定できます。

    signメソッドは、署名済みPDFドキュメントを表すBLOBオブジェクトを返します。

  5. 署名済みPDFドキュメントを保存する

    • コンストラクターを呼び出して、System.IO.FileStreamオブジェクトを作成します。 署名済みPDFドキュメントのファイルの場所と、ファイルを開くモードを表すstring値を渡します。
    • signメソッドで返されたBLOBオブジェクトの内容を格納するバイト配列を作成します。 BLOBオブジェクトのMTOMデータメンバーの値を取得して、バイト配列を設定します。
    • コンストラクターを呼び出し、System.IO.FileStreamオブジェクトを渡して、System.IO.BinaryWriterオブジェクトを作成します。
    • System.IO.BinaryWriterオブジェクトのWriteメソッドを呼び出し、バイト配列を渡すことにより、バイト配列の内容をPDFファイルに書き込みます。

関連トピック

PDFドキュメントのデジタル署名

MTOMを使用したAEM Formsの呼び出し

SwaRefを使用したAEM Formsの呼び出し

インタラクティブFormsのデジタル署名

Formsサービスが作成するインタラクティブフォームに署名することができます。 例えば、次のワークフローについて考えてみます。

  • Formsサービスを使用して、Designerを使用して作成されたXFAベースのPDFフォームと、XMLドキュメント内のフォームデータを結合します。 Formsサーバーは、インタラクティブフォームをレンダリングします。
  • SignatureサービスAPIを使用してインタラクティブフォームに署名します。

この場合、デジタル署名されたインタラクティブPDFフォームが生成されます。 XFAフォームに基づくPDFフォームに署名する場合は、必ずPDFファイルをAdobeのスタティックPDFフォームとして保存してください。 ダイナミックPDFフォームとして保存されたPDFフォームにAdobeを作成しようとすると、例外が発生します。 Formsサービスから返されるフォームに署名するので、フォームに署名フィールドが含まれていることを確認してください。

メモ

インタラクティブフォームに電子署名する前に、証明書をAEM Formsに追加する必要があります。 証明書は、管理コンソールを使用して、またはTrust Manager APIを使用してプログラムで追加されます。 (Trust Manager APIを使用した秘密鍵証明書の読み込みを参照)。

Forms Service APIを使用する場合、GenerateServerAppearanceランタイムオプションをtrueに設定します。 このランタイムオプションを使用すると、サーバー上で生成されたフォームの外観をAcrobatまたはAdobe Readerで開いたときにも、そのまま有効な状態を保つことができます。 Forms APIを使用して署名するインタラクティブフォームを生成する場合は、このランタイムオプションを設定することをお勧めします。

メモ

「インタラクティブFormsのデジタル署名」を読む前に、PDFドキュメントの署名について理解しておくことをお勧めします。 (PDFドキュメントのデジタル署名を参照)。

手順の概要

Formsサービスが返すインタラクティブフォームに電子署名するには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. FormsおよびSignaturesクライアントを作成します。
  3. Formsサービスを使用してインタラクティブフォームを取得します。
  4. インタラクティブフォームに署名します。
  5. 署名済みPDFドキュメントをPDFファイルとして保存します。

プロジェクトファイルを含める

必要なファイルを開発プロジェクトに含めます。 Javaを使用してクライアントアプリケーションを作成する場合は、必要なJARファイルを含めます。 Webサービスを使用する場合は、プロキシファイルを必ず含めてください。

次のJARファイルをプロジェクトのクラスパスに追加する必要があります。

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-forms-client.jar
  • adobe-utilities.jar(AEM FormsをJBossにデプロイする場合に必要)
  • jbossall-client.jar(AEM FormsをJBossにデプロイする場合に必要)

これらのJARファイルの場所について詳しくは、「AEM Forms Javaライブラリファイルを含める」を参照してください。

FormsおよびSignaturesクライアントの作成

このワークフローはFormsサービスとSignatureサービスの両方を呼び出すので、FormsサービスクライアントとSignatureサービスクライアントの両方を作成します。

Formsサービスを使用したインタラクティブフォームの取得

Formsサービスを使用して、署名するインタラクティブPDFフォームを取得できます。 AEM Forms以降は、レンダリングするフォームを含むFormsサービスにcom.adobe.idp.Documentオブジェクトを渡すことができます。 このメソッドの名前はrenderPDFForm2です。 このメソッドは、署名するフォームを含むcom.adobe.idp.Documentオブジェクトを返します。 このcom.adobe.idp.DocumentインスタンスをSignatureサービスに渡すことができます。

同様に、Webサービスを使用している場合は、Formsサービスが返すBLOBインスタンスをSignatureサービスに渡すことができます。

メモ

「インタラクティブFormsのデジタル署名」セクションに関連するクイックスタートは、renderPDFForm2メソッドを呼び出します。

インタラクティブフォームへの署名

PDFドキュメントに署名する際に、Signatureサービスが使用する実行時オプションを設定できます。 以下のオプションを設定できます。

  • 外観オプション
  • 失効確認
  • タイムスタンプ値

PDFSignatureAppearanceOptionSpecオブジェクトを使用して外観オプションを設定します。 例えば、PDFSignatureAppearanceOptionSpecオブジェクトのsetShowDateメソッドを呼び出してtrueを渡すことで、署名内に日付を表示できます。

署名済みPDFドキュメントを保存する

SignatureサービスがPDFドキュメントに電子署名を行った後、PDFファイルとして保存できます。 PDFファイルは、AcrobatまたはAdobe Readerで開くことができます。

関連トピック

Java APIを使用したインタラクティブフォームのデジタル署名

WebサービスAPIを使用したインタラクティブフォームのデジタル署名

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

PDFドキュメントのデジタル署名

インタラクティブPDF formsのレンダリング

Java APIを使用したインタラクティブフォームのデジタル署名

Formsと署名API(Java)を使用してインタラクティブフォームに電子署名する

  1. プロジェクトファイルを含める

    Javaプロジェクトのクラスパスに、adobe-signatures-client.jarやadobe-forms-client.jarなどのクライアントJARファイルを含めます。

  2. FormsおよびSignaturesクライアントの作成

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクタを使用して SignatureServiceClient オブジェクトを渡すことによって、ServiceClientFactory オブジェクトを作成します。
    • コンストラクタを使用して FormsServiceClient オブジェクトを渡すことによって、ServiceClientFactory オブジェクトを作成します。
  3. Formsサービスを使用したインタラクティブフォームの取得

    • コンストラクターを使用して、Formsサービスに渡すPDFドキュメントを表すjava.io.FileInputStreamオブジェクトを作成します。 PDFドキュメントの場所を指定するstring値を渡します。

    • コンストラクタを使用して com.adobe.idp.Document オブジェクトを渡すことによって、java.io.FileInputStream オブジェクトを作成します。

    • コンストラクターを使用して、Formsサービスに渡すフォームデータが含まれるXMLドキュメントを表すjava.io.FileInputStreamオブジェクトを作成します。 XMLファイルの場所を指定するstring値を渡します。

    • コンストラクタを使用して com.adobe.idp.Document オブジェクトを渡すことによって、java.io.FileInputStream オブジェクトを作成します。

    • 実行時オプションの設定に使用するPDFFormRenderSpecオブジェクトを作成します。 PDFFormRenderSpecオブジェクトのsetGenerateServerAppearanceメソッドを呼び出して、trueを渡します。

    • FormsServiceClientオブジェクトのrenderPDFForm2メソッドを呼び出し、次の値を渡します。

      • レンダリングするPDFフォームを含むcom.adobe.idp.Documentオブジェクト。
      • フォームとマージするデータを含むcom.adobe.idp.Documentオブジェクト。
      • 実行時オプションを格納するPDFFormRenderSpecオブジェクト。
      • Formsサービスに必要なURI値を含むURLSpecオブジェクト。 このパラメータ値にはnullを指定できます。
      • 添付ファイルを格納するjava.util.HashMapオブジェクト。 これはオプションのパラメーターで、フォームにファイルを添付しない場合はnullを指定できます。

      renderPDFForm2メソッドは、フォームデータストリームを含むFormsResultオブジェクトを返します

    • FormsResultオブジェクトのgetOutputContentメソッドを呼び出して、PDFフォームを取得します。 このメソッドは、インタラクティブフォームを表すcom.adobe.idp.Documentオブジェクトを返します。

  4. インタラクティブフォームへの署名

    SignatureServiceClientオブジェクトのsignメソッドを呼び出し、次の値を渡してPDFドキュメントに署名します。

    • 署名するPDFドキュメントを表すcom.adobe.idp.Documentオブジェクト。 このオブジェクトが、Formsサービスから取得されたcom.adobe.idp.Documentオブジェクトであることを確認します。
    • 署名された署名フィールドの名前を表すstring値です。
    • PDFドキュメントのデジタル署名に使用される秘密鍵証明書を表すCredentialオブジェクト。 Credentialオブジェクトの静的なgetInstanceメソッドを呼び出して、Credentialオブジェクトを作成します。 セキュリティ秘密鍵証明書に対応するエイリアス値を指定するstring値を渡します。
    • PDFドキュメントのダイジェストを作成する際に使用するハッシュアルゴリズムを表す静的データメンバーを指定するHashAlgorithmオブジェクトです。 例えば、SHA1アルゴリズムを使用するようにHashAlgorithm.SHA1を指定できます。
    • PDFドキュメントが電子署名された理由を表すstring値です。
    • 署名者の連絡先情報を表すstring値です。
    • デジタル署名の外観を制御するPDFSignatureAppearanceOptionsオブジェクト。 例えば、このオブジェクトを使用して、電子署名にカスタムロゴを追加できます。
    • 署名者の証明書に対して失効確認を実行するかどうかを指定するjava.lang.Booleanオブジェクトです。
    • オンライン証明書ステータスプロトコル(OCSP)サポートの環境設定を格納するOCSPPreferencesオブジェクト。 失効確認が行われない場合、このパラメーターは使用されず、nullを指定できます。
    • 証明書失効リスト(CRL)の環境設定を格納するCRLPreferencesオブジェクトです。 失効確認が行われない場合、このパラメーターは使用されず、nullを指定できます。
    • タイムスタンププロバイダー(TSP)サポートの環境設定を格納するTSPPreferencesオブジェクト。 このパラメーターはオプションで、nullを指定できます。

    signメソッドは、署名済みPDFドキュメントを表すcom.adobe.idp.Documentオブジェクトを返します。

  5. 署名済みPDFドキュメントを保存する

    • java.io.Fileオブジェクトを作成し、ファイル名の拡張子が.pdfであることを確認します。
    • com.adobe.idp.DocumentオブジェクトのcopyToFileメソッドを呼び出し、java.io.Fileを渡してDocumentオブジェクトの内容をファイルにコピーします。 signメソッドが返すcom.adobe.idp.Documentオブジェクトを使用していることを確認します。

関連トピック

インタラクティブFormsのデジタル署名

クイックスタート(SOAPモード):Java APIを使用したPDFドキュメントのデジタル署名

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

WebサービスAPIを使用してインタラクティブフォームにデジタル署名する

Formsと署名API(Webサービス)を使用してインタラクティブフォームに電子署名する

  1. プロジェクトファイルを含める

    MTOMを使用するMicrosoft .NETプロジェクトを作成します。 このクライアントアプリケーションは2つのAEM Formsサービスを呼び出すので、2つのサービス参照を作成します。 Signatureサービスに関連付けられたサービス参照には、次のWSDL定義を使用します。http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1.

    Formsサービスに関連付けられたサービス参照に、次のWSDL定義を使用します。http://localhost:8080/soap/services/FormsService?WSDL&lc_version=9.0.1.

    BLOBデータ型は両方のサービス参照に共通なので、BLOBデータ型を使用する際には完全に修飾します。 対応するWebサービスのクイックスタートでは、すべてのBLOBインスタンスが完全に認定されます。

    メモ

    localhostを、AEM FormsをホストするサーバーのIPアドレスに置き換えます。

  2. FormsおよびSignaturesクライアントの作成

    • デフォルトのコンストラクターを使用してSignatureServiceClientオブジェクトを作成します。

    • System.ServiceModel.EndpointAddressコンストラクターを使用してSignatureServiceClient.Endpoint.Addressオブジェクトを作成します。 AEM FormsサービスにWSDLを指定するstring値を渡します(例:http://localhost:8080/soap/services/SignatureService?WSDL)。 lc_version属性を使用する必要はありません。 この属性は、サービス参照を作成する際に使用されます)。

    • SignatureServiceClient.Endpoint.Bindingフィールドの値を取得してSystem.ServiceModel.BasicHttpBindingオブジェクトを作成します。 戻り値を BasicHttpBinding にキャストします。

    • System.ServiceModel.BasicHttpBindingオブジェクトのMessageEncodingフィールドをWSMessageEncoding.Mtomに設定します。 この値は、MTOMが使用されるようにします。

    • 次のタスクを実行して、基本的なHTTP認証を有効にします。

      • フィールドSignatureServiceClient.ClientCredentials.UserName.UserNameにAEM formsユーザー名を割り当てます。
      • 対応するパスワード値をフィールドSignatureServiceClient.ClientCredentials.UserName.Passwordに割り当てます。
      • フィールドBasicHttpBindingSecurity.Transport.ClientCredentialTypeに定数値HttpClientCredentialType.Basicを割り当てます。
    • フィールドBasicHttpBindingSecurity.Security.Modeに定数値BasicHttpSecurityMode.TransportCredentialOnlyを割り当てます。

    メモ

    Formsサービスクライアントに対して、これらの手順を繰り返します。

  3. Formsサービスを使用したインタラクティブフォームの取得

    • コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、署名されたPDFドキュメントを保存するために使用されます。

    • コンストラクターを呼び出し、署名するPDFドキュメントのファイルの場所と、ファイルを開くモードを表すstring値を渡して、System.IO.FileStreamオブジェクトを作成します。

    • System.IO.FileStreamオブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStreamオブジェクトのLengthプロパティを取得することで、バイト配列のサイズを判断できます。

    • System.IO.FileStreamオブジェクトのReadメソッドを呼び出し、読み取るバイト配列、開始位置、ストリーム長を渡すことによって、バイト配列にストリームデータを入力します。

    • BLOBオブジェクトのMTOMプロパティにバイト配列の内容を割り当てて、オブジェクトを設定します。

    • コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、フォームデータの格納に使用されます。

    • コンストラクターを呼び出し、フォームデータを含むXMLファイルのファイル位置と、ファイルを開くモードを表すstring値を渡して、System.IO.FileStreamオブジェクトを作成します。

    • System.IO.FileStreamオブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStreamオブジェクトのLengthプロパティを取得することで、バイト配列のサイズを判断できます。

    • System.IO.FileStreamオブジェクトのReadメソッドを呼び出し、読み取るバイト配列、開始位置、ストリーム長を渡すことによって、バイト配列にストリームデータを入力します。

    • BLOBオブジェクトのMTOMプロパティにバイト配列の内容を割り当てて、オブジェクトを設定します。

    • 実行時オプションの設定に使用するPDFFormRenderSpecオブジェクトを作成します。 値truePDFFormRenderSpecオブジェクトのgenerateServerAppearanceフィールドに割り当てます。

    • FormsServiceClientオブジェクトのrenderPDFForm2メソッドを呼び出し、次の値を渡します。

      • レンダリングするPDFフォームを含むBLOBオブジェクト。
      • フォームとマージするデータを含むBLOBオブジェクト。
      • 実行時オプションを格納するPDFFormRenderSpecオブジェクト。
      • Formsサービスに必要なURI値を含むURLSpecオブジェクト。 このパラメータ値にはnullを指定できます。
      • 添付ファイルを格納するjava.util.HashMapオブジェクト。 これはオプションのパラメーターで、フォームにファイルを添付しない場合はnullを指定できます。
      • フォーム内のページ数を保存するために使用される長い出力パラメーター。
      • ロケール値に使用される文字列出力パラメーターです。
      • インタラクティブフォームの保存に使用される出力パラメーターのFormResult値。
    • FormsResultオブジェクトのoutputContentフィールドを呼び出して、PDFフォームを取得します。 このフィールドには、インタラクティブフォームを表すBLOBオブジェクトが格納されます。

  4. インタラクティブフォームへの署名

    SignatureServiceClientオブジェクトのsignメソッドを呼び出し、次の値を渡してPDFドキュメントに署名します。

    • 署名するPDFドキュメントを表すBLOBオブジェクト。 Formsサービスから返されたBLOBインスタンスを使用します。
    • 署名された署名フィールドの名前を表すstring値です。
    • PDFドキュメントのデジタル署名に使用される秘密鍵証明書を表すCredentialオブジェクト。 コンストラクターを使用してCredentialオブジェクトを作成し、Credentialオブジェクトのaliasプロパティに値を割り当ててエイリアスを指定します。
    • PDFドキュメントのダイジェストを作成する際に使用するハッシュアルゴリズムを表す静的データメンバーを指定するHashAlgorithmオブジェクトです。 例えば、SHA1アルゴリズムを使用するようにHashAlgorithm.SHA1を指定できます。
    • ハッシュアルゴリズムを使用するかどうかを指定するBoolean値です。
    • PDFドキュメントが電子署名された理由を表すstring値です。
    • 署名者の場所を表すstring値です。
    • 署名者の連絡先情報を表すstring値です。
    • デジタル署名の外観を制御するPDFSignatureAppearanceOptionsオブジェクト。 例えば、このオブジェクトを使用して、電子署名にカスタムロゴを追加できます。
    • 署名者の証明書に対して失効確認を実行するかどうかを指定するSystem.Booleanオブジェクトです。 この失効確認が行われると、署名に埋め込まれます。 デフォルトは、false です。
    • オンライン証明書ステータスプロトコル(OCSP)サポートの環境設定を格納するOCSPPreferencesオブジェクト。 失効確認が行われない場合、このパラメーターは使用されず、nullを指定できます。 このオブジェクトについて詳しくは、『AEM Forms APIリファレンス🔗』を参照してください。
    • 証明書失効リスト(CRL)の環境設定を格納するCRLPreferencesオブジェクトです。 失効確認が行われない場合、このパラメーターは使用されず、nullを指定できます。
    • タイムスタンププロバイダー(TSP)サポートの環境設定を格納するTSPPreferencesオブジェクト。 このパラメーターはオプションで、nullを指定できます。

    signメソッドは、署名済みPDFドキュメントを表すBLOBオブジェクトを返します。

  5. 署名済みPDFドキュメントを保存する

    • コンストラクターを呼び出して、System.IO.FileStreamオブジェクトを作成します。 署名済みPDFドキュメントのファイルの場所と、ファイルを開くモードを表すstring値を渡します。
    • signメソッドで返されたBLOBオブジェクトの内容を格納するバイト配列を作成します。 BLOBオブジェクトのMTOMデータメンバーの値を取得して、バイト配列を設定します。
    • コンストラクターを呼び出し、System.IO.FileStreamオブジェクトを渡して、System.IO.BinaryWriterオブジェクトを作成します。
    • System.IO.BinaryWriterオブジェクトのWriteメソッドを呼び出し、バイト配列を渡すことにより、バイト配列の内容をPDFファイルに書き込みます。

関連トピック

インタラクティブFormsのデジタル署名

MTOMを使用したAEM Formsの呼び出し

PDF ドキュメントの認証

認証署名と呼ばれる特定のタイプの署名によって PDF ドキュメントを認証することで、PDF ドキュメントを保護することができます。認証署名は、以下の方法で電子署名と区別されます。

  • 認証署名は PDF ドキュメントに適用される最初の署名です。つまり、認証署名が適用されるときは、ドキュメント内の他の署名フィールドは未署名でなければいけません。認証署名は 1 つの PDF ドキュメントにつき 1 つです。PDF ドキュメントを署名および認証するには、署名の前に認証を行う必要があります。PDF ドキュメントの認証後、他の署名フィールドに電子署名を行うことができます。
  • ドキュメントの作成者または発信者は、認証署名を無効にすることなく、特定の方法でドキュメントの変更が可能になるように指定することができます。例えば、フォームへの入力やコメント入力を許可するドキュメントなどがあります。作成者が特定の変更を許可しないように設定を行った場合は、Acrobat はユーザーのその方法によるドキュメントの変更を制限します。別のアプリケーションを使用するなどしてそのような変更が行われた場合は、認証署名は無効となり、Acrobat はユーザーがドキュメントを開いた際に警告を発します。(未認証の署名では、変更を防ぐことはできません。また、通常の編集操作では元の署名は無効になりません。)
  • 署名時に、ドキュメントのコンテンツにあいまいさや誤解をもたらす可能性のある、特定の種類のコンテンツをスキャンします。例えば、注釈により、認証される対象を把握するために重要なページ上のテキストが隠れてしまう場合があります。そのようなコンテンツに関する、説明(法的証明)を提供することができます。

SignatureサービスJava APIまたはSignature WebサービスAPIを使用して、PDFドキュメントをプログラムで認証できます。 PDFドキュメントを認証する場合は、Credentialサービスに存在するセキュリティ証明書を参照する必要があります。 セキュリティ証明書について詳しくは、使用しているアプリケーションサーバー版の『AEM Forms のインストールとデプロイ』ガイドを参照してください。

メモ

同じPDFドキュメントを認証および署名する際に、認証署名が信頼されていない場合、AcrobatまたはAdobe ReaderでPDFドキュメントを開くと、最初の署名の横に黄色い三角形が表示されます。 この状況を避けるには、認証署名を信頼する必要があります。

メモ

PDFドキュメントの署名や認証にnCipher nShield HSM秘密鍵証明書を使用する場合、AEM FormsがデプロイされているJ2EEアプリケーションサーバーが再起動されるまで、新しい秘密鍵証明書は使用できません。 ただし、設定値を設定すると、J2EEアプリケーションサーバーを再起動しなくても署名または認証の操作が機能します。

次の設定値をcknfastrcファイルに追加できます。このファイルは/opt/nfast/cknfastrc(またはc:\nfast\cknfastrc)にあります。

    CKNFAST_ASSUME_SINGLE_PROCESS=0

この設定値をcknfastrcファイルに追加すると、J2EEアプリケーションサーバーを再起動しなくても、新しい秘密鍵証明書を使用できます。

メモ

Signatureサービスとドキュメントの認証について詳しくは、『AEM Formsのサービスリファレンス』を参照してください。

手順の概要

PDFドキュメントを認証するには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. Signatureクライアントを作成します。
  3. 認証するPDFドキュメントを取得します。
  4. PDFドキュメントを認証します。
  5. 認証済みのPDFドキュメントをPDFファイルとして保存します。

プロジェクトファイルを含める

必要なファイルを開発プロジェクトに含めます。 Javaを使用してクライアントアプリケーションを作成する場合は、必要なJARファイルを含めます。 Webサービスを使用する場合は、プロキシファイルを必ず含めてください。

次のJARファイルをプロジェクトのクラスパスに追加する必要があります。

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(AEM FormsをJBossにデプロイする場合に必要)
  • jbossall-client.jar(AEM FormsをJBossにデプロイする場合に必要)

これらのJARファイルの場所について詳しくは、「AEM Forms Javaライブラリファイルを含める」を参照してください。

Signatureクライアントの作成

プログラムでSignature操作を実行する前に、Signatureクライアントを作成する必要があります。

認証するPDFドキュメントの取得

PDFドキュメントを認証するには、署名フィールドを含むPDFドキュメントを取得する必要があります。 PDFドキュメントに署名フィールドが含まれていない場合、そのドキュメントは認証できません。 署名フィールドは、Designerを使用するか、プログラムを使用して追加できます。 プログラムによる署名フィールドの追加について詳しくは、「署名フィールドの追加」を参照してください。

PDFドキュメントの認証

PDFドキュメントを正しく認証するには、SignatureサービスがPDFドキュメントを認証するために使用する次の入力値が必要です。

  • PDFドキュメント:署名フィールドを含むPDFドキュメントです。署名フィールドは、認証済み署名のグラフィック表現を含むフォームフィールドです。PDFドキュメントを認証するには、署名フィールドが含まれている必要があります。 署名フィールドは、Designerを使用するか、プログラムを使用して追加できます。 (署名フィールドの追加を参照)。
  • 署名フィールド名:認証される署名フィールドの完全修飾名です。次の値は例です。form1[0].#subform[1].SignatureField3[3]. XFAフォームフィールドを使用する場合は、署名フィールドの名前の一部を使用することもできます。SignatureField3[3]. フィールド名にnull値が渡されると、非表示の署名フィールドが動的に作成され、認証されます。
  • セキュリティ証明書:PDFドキュメントの認証に使用される秘密鍵証明書。このセキュリティ証明書には、パスワードとエイリアスが含まれます。このエイリアスは、Credentialサービス内にある資格情報に表示されるエイリアスと一致する必要があります。 エイリアスは、PKCS#12ファイル(拡張子に.pfxを持つ)またはハードウェアセキュリティモジュール(HSM)に含まれる可能性のある、実際の秘密鍵証明書への参照です。
  • ハッシュアルゴリズム:PDFドキュメントのダイジェストの作成に使用するハッシュアルゴリズムです。
  • 署名の理由:PDFドキュメントが認証された理由を他のユーザーが知るためにAcrobatまたはAdobe Readerに表示される値です。
  • 署名者の場所:秘密鍵証明書で指定された署名者の場所です。
  • 連絡先情報:署名者の住所や電話番号などの連絡先情報。
  • 権限情報:認証署名を無効にすることなく、エンドユーザーがドキュメントに対して実行できるアクションを制御する権限。例えば、PDFドキュメントに変更を加えると認証署名が無効になるように権限を設定できます。
  • 法的説明:ドキュメントを認証すると、ドキュメントのコンテンツがあいまいになったり誤解を招く可能性のある特定の種類のコンテンツを自動的にスキャンします。例えば、注釈により、認証される対象を把握するために重要なページ上のテキストが隠れてしまう場合があります。スキャン処理により、これらのタイプのコンテンツに関する警告が生成されます。 この値は、警告が生成された可能性のあるコンテンツの追加の説明を提供します。
  • 外観オプション:認証署名の外観を制御するオプションです。例えば、認証署名に日付情報を表示できます。
  • 失効確認:この値は、署名者の証明書に対して失効確認を行うかどうかを指定します。デフォルト設定のfalseは、失効確認が行われないことを意味します。
  • OCSP設定:PDFドキュメントの認証に使用される秘密鍵証明書のステータスに関する情報を提供する、オンライン証明書ステータスプロトコル(OCSP)サポートの設定です。例えば、PDFドキュメントへのサインオンに使用する秘密鍵証明書に関する情報を提供するサーバーのURLを指定できます。
  • CRL設定:失効確認が行われた場合の、証明書失効リスト(CRL)環境設定の設定です。例えば、証明書が失効したかどうかを常に確認するように指定できます。
  • タイムスタンプ:認証署名に適用されるタイムスタンプ情報を定義する設定です。タイムスタンプは、特定のデータが特定の時間以前に確立されたことを示します。 この知識は、署名者と検証者の間に信頼関係を構築するのに役立ちます。

認証済みPDFドキュメントをPDFファイルとして保存

SignatureサービスがPDFドキュメントを認証したら、PDFファイルとして保存して、AcrobatまたはAdobe Readerで開くことができます。

関連トピック

Java APIを使用したPDFドキュメントの認証

WebサービスAPIを使用したPDFドキュメントの認証

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

署名フィールドの追加

Java APIを使用したPDFドキュメントの認証

署名API(Java)を使用してPDFドキュメントを認証します。

  1. プロジェクトファイルを含める

    Javaプロジェクトのクラスパスに、adobe-signatures-client.jarなどのクライアントJARファイルを含めます。

  2. Signatureクライアントの作成

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクタを使用して SignatureServiceClient オブジェクトを渡すことによって、ServiceClientFactory オブジェクトを作成します。
  3. 認証するPDFドキュメントの取得

    • コンストラクターを使用し、PDFドキュメントの場所を指定する文字列値を渡して、認証するPDFドキュメントを表すjava.io.FileInputStreamオブジェクトを作成します。
    • コンストラクタを使用して com.adobe.idp.Document オブジェクトを渡すことによって、java.io.FileInputStream オブジェクトを作成します。
  4. PDFドキュメントの認証

    SignatureServiceClientオブジェクトのcertifyメソッドを呼び出し、次の値を渡してPDFドキュメントを認証します。

    • 認証するPDFドキュメントを表すcom.adobe.idp.Documentオブジェクト。
    • 署名を含む署名フィールドの名前を表すstring値です。
    • PDFドキュメントの認証に使用される秘密鍵証明書を表すCredentialオブジェクト。 Credentialオブジェクトの静的なgetInstanceメソッドを呼び出し、セキュリティ証明書に対応するエイリアス値を指定する文字列値を渡して、Credentialオブジェクトを作成します。
    • PDFドキュメントのダイジェストを作成する際に使用するハッシュアルゴリズムを表す静的データメンバーを指定するHashAlgorithmオブジェクトです。 例えば、SHA1アルゴリズムを使用するようにHashAlgorithm.SHA1を指定できます。
    • PDFドキュメントが認証された理由を表すstring値です。
    • 署名者の連絡先情報を表すstring値です。
    • 署名を無効にするPDFドキュメントに対して実行できるアクションを指定するMDPPermissionsオブジェクトです。
    • 認証署名の外観を制御するPDFSignatureAppearanceOptionsオブジェクト。 必要に応じて、setShowDateなどのメソッドを呼び出して、署名の外観を変更します。
    • 署名を無効にするアクションの説明を提供するstring値です。
    • 署名者の証明書に対して失効確認を実行するかどうかを指定するjava.lang.Booleanオブジェクトです。 この失効確認が行われると、署名に埋め込まれます。 デフォルトは、false です。
    • 認証する署名フィールドがロックされているかどうかを指定するjava.lang.Booleanオブジェクト。 このフィールドがロックされている場合、署名フィールドは読み取り専用としてマークされ、プロパティを変更することはできません。また、必要な権限を持たないユーザーは署名フィールドをクリアできません。 デフォルトは、false です。
    • オンライン証明書ステータスプロトコル(OCSP)サポートの環境設定を格納するOCSPPreferencesオブジェクト。 失効確認が行われない場合、このパラメーターは使用されず、nullを指定できます。 このオブジェクトについて詳しくは、「AEM Forms APIリファレンス」を参照してください。
    • 証明書失効リスト(CRL)の環境設定を格納するCRLPreferencesオブジェクトです。 失効確認が行われない場合、このパラメーターは使用されず、nullを指定できます。
    • タイムスタンププロバイダー(TSP)サポートの環境設定を格納するTSPPreferencesオブジェクト。 例えば、TSPPreferencesオブジェクトを作成した後に、TSPPreferencesオブジェクトのsetTspServerURLメソッドを呼び出すことで、TSPサーバーのURLを設定できます。 このパラメーターはオプションで、nullを指定できます。 詳しくは、「AEM Formsのサービスリファレンス」を参照してください。

    certifyメソッドは、認証済みPDFドキュメントを表すcom.adobe.idp.Documentオブジェクトを返します。

  5. 認証済みPDFドキュメントをPDFファイルとして保存

    • java.io.File オブジェクトを作成し、ファイル拡張子が .pdf であることを確認します。
    • com.adobe.idp.DocumentオブジェクトのcopyToFileメソッドを呼び出して、com.adobe.idp.Documentオブジェクトの内容をファイルにコピーします。

関連トピック

PDF ドキュメントの認証

クイックスタート(SOAPモード):Java APIを使用したPDFドキュメントの認証

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

WebサービスAPIを使用したPDFドキュメントの認証

署名API(Webサービス)を使用してPDFドキュメントを認証します。

  1. プロジェクトファイルを含める

    MTOMを使用するMicrosoft .NETプロジェクトを作成します。 次のWSDL定義を使用していることを確認します。http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1.

    メモ

    localhostを、AEM FormsをホストするサーバーのIPアドレスに置き換えます。

  2. Signatureクライアントの作成

    • デフォルトのコンストラクターを使用してSignatureServiceClientオブジェクトを作成します。

    • System.ServiceModel.EndpointAddressコンストラクターを使用してSignatureServiceClient.Endpoint.Addressオブジェクトを作成します。 AEM FormsサービスにWSDLを指定するstring値を渡します(例:http://localhost:8080/soap/services/SignatureService?WSDL)。 lc_version属性を使用する必要はありません。 この属性は、サービス参照を作成する際に使用されます)。

    • SignatureServiceClient.Endpoint.Bindingフィールドの値を取得してSystem.ServiceModel.BasicHttpBindingオブジェクトを作成します。 戻り値を BasicHttpBinding にキャストします。

    • System.ServiceModel.BasicHttpBindingオブジェクトのMessageEncodingフィールドをWSMessageEncoding.Mtomに設定します。 この値は、MTOMが使用されるようにします。

    • 次のタスクを実行して、基本的なHTTP認証を有効にします。

      • フィールドSignatureServiceClient.ClientCredentials.UserName.UserNameにAEM formsユーザー名を割り当てます。
      • 対応するパスワード値をフィールドSignatureServiceClient.ClientCredentials.UserName.Passwordに割り当てます。
      • フィールドBasicHttpBindingSecurity.Transport.ClientCredentialTypeに定数値HttpClientCredentialType.Basicを割り当てます。
      • フィールドBasicHttpBindingSecurity.Security.Modeに定数値BasicHttpSecurityMode.TransportCredentialOnlyを割り当てます。
  3. 認証するPDFドキュメントの取得

    • コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、認証されたPDFドキュメントを保存するために使用されます。
    • コンストラクターを呼び出し、認証するPDFドキュメントのファイルの場所とファイルを開くモードを表すstring値を渡して、System.IO.FileStreamオブジェクトを作成します。
    • System.IO.FileStreamオブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStreamオブジェクトのLengthプロパティを取得することで、バイト配列のサイズを判断できます。
    • System.IO.FileStreamオブジェクトのReadメソッドを呼び出し、読み取るバイト配列、開始位置、ストリーム長を渡すことによって、バイト配列にストリームデータを入力します。
    • BLOBオブジェクトのMTOMデータメンバーにバイト配列の内容を割り当てて、オブジェクトを設定します。
  4. PDFドキュメントの認証

    SignatureServiceClientオブジェクトのcertifyメソッドを呼び出し、次の値を渡してPDFドキュメントを認証します。

    • 認証するPDFドキュメントを表すBLOBオブジェクト。
    • 署名を含む署名フィールドの名前を表すstring値です。
    • PDFドキュメントの認証に使用される秘密鍵証明書を表すCredentialオブジェクト。 コンストラクターを使用してCredentialオブジェクトを作成し、Credentialオブジェクトのaliasプロパティに値を割り当ててエイリアスを指定します。
    • PDFドキュメントのダイジェストを作成する際に使用するハッシュアルゴリズムを表す静的データメンバーを指定するHashAlgorithmオブジェクトです。 例えば、SHA1アルゴリズムを使用するようにHashAlgorithm.SHA1を指定できます。
    • ハッシュアルゴリズムを使用するかどうかを指定するBoolean値です。
    • PDFドキュメントが認証された理由を表すstring値です。
    • 署名者の場所を表すstring値です。
    • 署名者の連絡先情報を表すstring値です。
    • 署名を無効にするPDFドキュメントに対して実行できるアクションを指定する、MDPPermissionsオブジェクトの静的データメンバーです。
    • 前のパラメーター値として渡されたMDPPermissionsオブジェクトを使用するかどうかを指定するBoolean値。
    • 署名を無効にするアクションを説明するstring値です。
    • 認証署名の外観を制御するPDFSignatureAppearanceOptionsオブジェクト。 コンストラクタを使用して PDFSignatureAppearanceOptions オブジェクトを作成します。署名のデータメンバーの1つを設定して、署名の外観を変更できます。
    • 署名者の証明書に対して失効確認を実行するかどうかを指定するSystem.Booleanオブジェクトです。 この失効確認が行われると、署名に埋め込まれます。 デフォルトは、false です。
    • 認証する署名フィールドがロックされているかどうかを指定するSystem.Booleanオブジェクト。 このフィールドがロックされている場合、署名フィールドは読み取り専用としてマークされ、プロパティを変更することはできません。また、必要な権限を持たないユーザーは署名フィールドをクリアできません。 デフォルトは、false です。
    • 署名フィールドがロックされているかどうかを指定するSystem.Booleanオブジェクト。 つまり、前のパラメーターにtrueを渡す場合は、このパラメーターにtrueを渡します。
    • オンライン証明書ステータスプロトコル(OCSP)サポートの環境設定を格納するOCSPPreferencesオブジェクト。PDFドキュメントの認証に使用される秘密鍵証明書のステータスに関する情報を提供します。 失効確認が行われない場合、このパラメーターは使用されず、nullを指定できます。
    • 証明書失効リスト(CRL)の環境設定を格納するCRLPreferencesオブジェクトです。 失効確認が行われない場合、このパラメーターは使用されず、nullを指定できます。
    • タイムスタンププロバイダー(TSP)サポートの環境設定を格納するTSPPreferencesオブジェクト。 例えば、TSPPreferencesオブジェクトを作成した後、TSPPreferencesオブジェクトのtspServerURLデータメンバーを設定することで、TSPのURLを設定できます。 このパラメーターはオプションで、nullを指定できます。

    certifyメソッドは、認証済みPDFドキュメントを表すBLOBオブジェクトを返します。

  5. 認証済みPDFドキュメントをPDFファイルとして保存

    • コンストラクターを呼び出し、認証済みPDFドキュメントを含むPDFドキュメントのファイルの場所と、ファイルを開くモードを表すstring値を渡して、System.IO.FileStreamオブジェクトを作成します。
    • certifyメソッドで返されたBLOBオブジェクトの内容を格納するバイト配列を作成します。 BLOBオブジェクトのbinaryDataデータメンバーの値を取得して、バイト配列を設定します。
    • コンストラクターを呼び出し、System.IO.FileStreamオブジェクトを渡して、System.IO.BinaryWriterオブジェクトを作成します。
    • System.IO.BinaryWriterオブジェクトのWriteメソッドを呼び出し、バイト配列を渡すことにより、バイト配列の内容をPDFファイルに書き込みます。

関連トピック

PDF ドキュメントの認証

MTOMを使用したAEM Formsの呼び出し

SwaRefを使用したAEM Formsの呼び出し

デジタル署名の検証

電子署名を検証することで、署名された PDF ドキュメントに変更がなく、電子署名が有効であることを確認することができます。電子署名を検証する際に、署名のステータスや、署名者のIDなどの署名のプロパティを確認できます。 電子署名を信用する前に、検証することをおすすめします。電子署名を検証する際、電子署名を含む PDF ドキュメントを参照します。

署名者のIDが不明であるとします。 AcrobatでPDFドキュメントを開くと、次の図に示すように、署名者のIDが不明であることを示す警告メッセージが表示されます。

vd_vd_verifysig

同様に、プログラムによって電子署名を検証する場合、署名者のIDのステータスを判断できます。 例えば、前の図に示すドキュメントで電子署名を検証すると、署名者のIDが不明になります。

メモ

Signatureサービスとデジタル署名の検証について詳しくは、『AEM Formsのサービスリファレンス』を参照してください。

手順の概要

電子署名を検証するには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. Signatureクライアントを作成します。
  3. 検証する署名が含まれているPDFドキュメントを取得します。
  4. PKI実行時オプションを設定します。
  5. 電子署名を検証します。
  6. 署名のステータスを確認します。
  7. 署名者のIDを特定します。

プロジェクトファイルを含める

必要なファイルを開発プロジェクトに含めます。 Javaを使用してクライアントアプリケーションを作成する場合は、必要なJARファイルを含めます。 Webサービスを使用している場合は、プロキシファイルを含めます。

次のJARファイルをプロジェクトのクラスパスに追加する必要があります。

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(AEM FormsをJBossにデプロイする場合に必要)
  • jbossall-client.jar(AEM FormsをJBossにデプロイする場合に必要)

これらのJARファイルの場所について詳しくは、「AEM Forms Javaライブラリファイルを含める」を参照してください。

Signatureクライアントの作成

プログラムでSignatureサービス操作を実行する前に、Signatureサービスクライアントを作成します。

検証する署名が含まれているPDFドキュメントを取得します

PDFドキュメントのデジタル署名または認証に使用される署名を検証するには、署名を含むPDFドキュメントを取得します。

PKI実行時オプションの設定

PDFドキュメント内の署名を検証する際にSignatureサービスで使用する次のPKIランタイムオプションを設定します。

  • 検証時間
  • 失効確認
  • タイムスタンプ値

これらのオプションを設定する際に、検証時間を指定できます。 例えば、現在の時刻(バリデーターのコンピューター上の時刻)を選択し、現在の時刻を使用するように指定できます。 様々な時間値について詳しくは、『AEM Forms APIリファレンス』のVerificationTime列挙値を参照してください。

また、検証プロセスの一環として失効確認を実行するかどうかを指定できます。 例えば、失効確認を実行して、証明書が失効しているかどうかを判断できます。 失効確認オプションについて詳しくは、『AEM Forms APIリファレンス』のRevocationCheckStyle列挙値を参照してください。

証明書に対して失効確認を実行するには、CRLOptionSpecオブジェクトを使用して、証明書失効リスト(CRL)サーバーへのURLを指定します。 ただし、CRLサーバーへのURLを指定しない場合、Signatureサービスは証明書からURLを取得します。

失効確認を実行する際に、CRLサーバーを使用する代わりに、オンライン証明書ステータスプロトコル(OCSP)サーバーを使用できます。 通常、CRLサーバーとは異なりOCSPサーバーを使用する場合は、失効確認の実行が高速になります。 (オンライン証明書ステータスプロトコルを参照)。

Signatureサービスが使用するCRLおよびOCSPサーバーの順序は、「Adobeのアプリケーションとサービス」を使用して設定できます。 例えば、AdobeのアプリケーションとサービスでOCSPサーバーを最初に設定した場合、OCSPサーバーをチェックし、次にCRLサーバーをチェックします。

失効確認を実行しない場合、Signatureサービスは証明書が失効しているかどうかを確認しません。 つまり、CRLおよびOCSPサーバー情報は無視されます。

メモ

CRLOptionSpecOCSPOptionSpecオブジェクトを使用して、証明書で指定されたURLを上書きできます。 例えば、CRLサーバーを上書きするには、CRLOptionSpecオブジェクトのsetLocalURIメソッドを呼び出します。

タイムスタンプとは、署名済みまたは認証済みのドキュメントが変更された時間を追跡するプロセスです。 ドキュメントに署名した後は、誰もドキュメントを変更できません。 タイムスタンプは、署名済みまたは認証済みのドキュメントの有効性を強化するのに役立ちます。 TSPOptionSpecオブジェクトを使用して、タイムスタンプオプションを設定できます。 例えば、タイムスタンププロバイダー(TSP)サーバーのURLを指定できます。

メモ

JavaおよびWebサービスのクイックスタートでは、検証時間はVerificationTime.CURRENT_TIMEに、失効確認はRevocationCheckStyle.BestEffortに設定されます。 CRLまたはOCSPサーバー情報が指定されていないので、証明書からサーバー情報を取得します。

電子署名の検証

署名を正しく検証するには、署名が含まれる署名フィールドの完全修飾名(form1[0].#subform[1].SignatureField3[3]など)を指定します。 XFAフォームフィールドを使用する場合は、署名フィールドの名前の一部を使用することもできます。SignatureField3.

デフォルトでは、Signatureサービスは、検証時間の経過後にドキュメントに署名できる時間を65分に制限します。 ユーザーが現在の時刻に署名を検証しようとし、署名時刻が現在の時刻より後で65分以内の場合、Signatureサービスは検証エラーを作成しません。

メモ

署名を検証する際に必要なその他の値については、『AEM Forms APIリファレンス』を参照してください。

署名のステータスの確認

電子署名の検証の一環として、署名のステータスを確認できます。

署名者のIDの確認

署名者のIDを確認できます。次の値のいずれかを指定できます。

  • 不明:署名者の検証を実行できないため、この署名者は不明です。
  • 信頼済み:この署名者は信頼されています。
  • 信頼できない:この署名者は信頼できません。

関連トピック

Java APIを使用した電子署名の検証

WebサービスAPIを使用した電子署名の検証

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

Java APIを使用した電子署名の検証

Signature Service API(Java)を使用して電子署名を検証します。

  1. プロジェクトファイルを含める

    Javaプロジェクトのクラスパスに、adobe-signatures-client.jarなどのクライアントJARファイルを含めます。

  2. Signatureクライアントの作成

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクタを使用して SignatureServiceClient オブジェクトを渡すことによって、ServiceClientFactory オブジェクトを作成します。
  3. 検証する署名が含まれているPDFドキュメントを取得します

    • コンストラクターを使用して、検証する署名が含まれるPDFドキュメントを表すjava.io.FileInputStreamオブジェクトを作成します。 PDFドキュメントの場所を指定するstring値を渡します。
    • コンストラクタを使用して com.adobe.idp.Document オブジェクトを渡すことによって、java.io.FileInputStream オブジェクトを作成します。
  4. PKI実行時オプションの設定

    • コンストラクタを使用して PKIOptions オブジェクトを作成します。
    • PKIOptionsオブジェクトのsetVerificationTimeメソッドを呼び出し、検証時間を指定するVerificationTime列挙値を渡すことで、検証時間を設定します。
    • PKIOptionsオブジェクトのsetRevocationCheckStyleメソッドを呼び出し、失効確認を実行するかどうかを指定するRevocationCheckStyle列挙値を渡すことで、失効確認オプションを設定します。
  5. 電子署名の検証

    SignatureServiceClientオブジェクトのverify2メソッドを呼び出し、次の値を渡して、署名を検証します。

    • デジタル署名されたPDFドキュメントまたは認証済みPDFドキュメントを含むcom.adobe.idp.Documentオブジェクト。
    • 検証する署名が含まれている署名フィールド名を表すstring値です。
    • PKIランタイムオプションを含むPKIOptionsオブジェクト。
    • SPI情報を含むVerifySPIOptionsインスタンス。 このパラメーターにはnullを指定できます。

    verify2メソッドは、デジタル署名の検証に使用できる情報を含むPDFSignatureVerificationInfoオブジェクトを返します。

  6. 署名のステータスの確認

    • PDFSignatureVerificationInfoオブジェクトのgetStatusメソッドを呼び出して、署名のステータスを判断します。 このメソッドは、署名ステータスを指定するSignatureStatusオブジェクトを返します。 例えば、署名済みPDFドキュメントが変更されていない場合、このメソッドはSignatureStatus.DocumentSigNoChangesを返します。
  7. 署名者のIDの確認

    • PDFSignatureVerificationInfoオブジェクトのgetSignerメソッドを呼び出して、署名者のIDを特定します。 このメソッドは、IdentityInformationオブジェクトを返します。
    • IdentityInformationオブジェクトのgetStatusメソッドを呼び出して、署名者のIDを判断します。 このメソッドは、IDを指定するIdentityStatus列挙値を返します。 例えば、署名者が信頼できる場合、このメソッドはIdentityStatus.TRUSTEDを返します。

関連トピック

電子署名の検証

クイックスタート(SOAPモード):Java APIを使用した電子署名の検証

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

WebサービスAPIを使用した電子署名の検証

Signature Service API(Webサービス)を使用して電子署名を検証します。

  1. プロジェクトファイルを含める

    MTOMを使用するMicrosoft .NETプロジェクトを作成します。 次のWSDL定義を使用していることを確認します。http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1.

    メモ

    localhostを、AEM FormsをホストするサーバーのIPアドレスに置き換えます。

  2. Signatureクライアントの作成

    • デフォルトのコンストラクターを使用してSignatureServiceClientオブジェクトを作成します。

    • System.ServiceModel.EndpointAddressコンストラクターを使用してSignatureServiceClient.Endpoint.Addressオブジェクトを作成します。 AEM FormsサービスにWSDLを指定するstring値を渡します(例:http://localhost:8080/soap/services/SignatureService?WSDL)。 lc_version属性を使用する必要はありません。 この属性は、サービス参照を作成する際に使用されます)。

    • SignatureServiceClient.Endpoint.Bindingフィールドの値を取得してSystem.ServiceModel.BasicHttpBindingオブジェクトを作成します。 戻り値を BasicHttpBinding にキャストします。

    • System.ServiceModel.BasicHttpBindingオブジェクトのMessageEncodingフィールドをWSMessageEncoding.Mtomに設定します。 この値は、MTOMが使用されるようにします。

    • 次のタスクを実行して、基本的なHTTP認証を有効にします。

      • フィールドSignatureServiceClient.ClientCredentials.UserName.UserNameにAEM formsユーザー名を割り当てます。
      • 対応するパスワード値をフィールドSignatureServiceClient.ClientCredentials.UserName.Passwordに割り当てます。
      • フィールドBasicHttpBindingSecurity.Transport.ClientCredentialTypeに定数値HttpClientCredentialType.Basicを割り当てます。
      • フィールドBasicHttpBindingSecurity.Security.Modeに定数値BasicHttpSecurityMode.TransportCredentialOnlyを割り当てます。
  3. 検証する署名が含まれているPDFドキュメントを取得します

    • コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、検証するデジタル署名または認証署名が含まれるPDFドキュメントを保存するために使用されます。
    • コンストラクターを呼び出して、System.IO.FileStreamオブジェクトを作成します。 署名済みPDFドキュメントのファイルの場所と、ファイルを開くモードを表すstring値を渡します。
    • System.IO.FileStreamオブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStreamオブジェクトのLengthプロパティを取得することで、バイト配列のサイズを判断できます。
    • System.IO.FileStreamオブジェクトのReadメソッドを呼び出して、バイト配列にストリームデータを入力します。 読み取るバイト配列、開始位置、ストリーム長を渡します。
    • BLOBオブジェクトのMTOMプロパティにバイト配列の内容を割り当てて、オブジェクトを設定します。
  4. PKI実行時オプションの設定

    • コンストラクタを使用して PKIOptions オブジェクトを作成します。
    • PKIOptionsオブジェクトのverificationTimeデータメンバに検証時間を指定するVerificationTime列挙値を割り当てて、検証時間を設定します。
    • 失効確認オプションを設定するには、 PKIOptionsオブジェクトのrevocationCheckStyleデータメンバに失効確認を実行するかどうかを指定するRevocationCheckStyle列挙値を割り当てます。
  5. 電子署名の検証

    SignatureServiceClientオブジェクトのverify2メソッドを呼び出し、次の値を渡して、署名を検証します。

    • デジタル署名されたPDFドキュメントまたは認証済みPDFドキュメントを含むBLOBオブジェクト。
    • 検証する署名が含まれている署名フィールド名を表すstring値です。
    • PKIランタイムオプションを含むPKIOptionsオブジェクト。
    • SPI情報を含むVerifySPIOptionsインスタンス。 このパラメーターにはnullを指定できます。

    verify2メソッドは、デジタル署名の検証に使用できる情報を含むPDFSignatureVerificationInfoオブジェクトを返します。

  6. 署名のステータスの確認

    PDFSignatureVerificationInfoオブジェクトのstatusデータメンバーの値を取得して、署名のステータスを判断します。 このデータメンバは、署名の状態を指定するSignatureStatusオブジェクトを格納します。 例えば、署名済みPDFドキュメントが変更された場合、statusデータメンバーは値SignatureStatus.DocumentSigNoChangesを保存します。

  7. 署名者のIDの確認

    • PDFSignatureVerificationInfoオブジェクトのsignerデータメンバーの値を取得して、署名者のIDを特定します。 このメンバはIdentityInformationオブジェクトを返します。
    • IdentityInformationオブジェクトのstatusデータメンバーを取得して、署名者のIDを確認します。 このデータメンバーは、IDを指定するIdentityStatus列挙値を返します。 例えば、署名者が信頼されている場合、このメンバーはIdentityStatus.TRUSTEDを返します。

関連トピック

電子署名の検証

MTOMを使用したAEM Formsの呼び出し

SwaRefを使用したAEM Formsの呼び出し

複数のデジタル署名の検証

AEM Formsは、PDFドキュメント内のすべての電子署名を検証する手段を提供します。 複数の署名者からの署名が必要なビジネスプロセスの結果、PDFドキュメントに複数の電子署名が含まれているとします。 例えば、融資担当者の署名と管理者の署名の両方を必要とする金融トランザクションを考えてみます。 SignatureサービスJava APIまたはWebサービスAPIを使用して、PDFドキュメント内のすべての署名を検証できます。 複数の署名を検証する際は、それぞれの署名のステータスやプロパティを確認できます。電子署名を信頼する前に、確認することをお勧めします。 単一のデジタル署名の検証について詳しく理解しておくことをお勧めします。

メモ

Signatureサービスとデジタル署名の検証について詳しくは、『AEM Formsのサービスリファレンス』を参照してください。

手順の概要

複数の電子署名を検証するには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. Signatureクライアントを作成します。
  3. 検証する署名が含まれているPDFドキュメントを取得します。
  4. PKI実行時オプションを設定します。
  5. すべての電子署名を取得します。
  6. すべての署名を繰り返し処理します。

プロジェクトファイルを含める

必要なファイルを開発プロジェクトに含めます。 Javaを使用してクライアントアプリケーションを作成する場合は、必要なJARファイルを含めます。 Webサービスを使用している場合は、プロキシファイルを含めます。

次のJARファイルをプロジェクトのクラスパスに追加する必要があります。

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(AEM FormsをJBossにデプロイする場合に必要)
  • jbossall-client.jar(AEM FormsをJBossにデプロイする場合に必要)

これらのJARファイルの場所について詳しくは、「AEM Forms Javaライブラリファイルを含める」を参照してください。

Signatureクライアントの作成

プログラムでSignatureサービス操作を実行する前に、Signatureサービスクライアントを作成します。

検証する署名が含まれているPDFドキュメントを取得します

PDFドキュメントのデジタル署名または認証に使用される署名を検証するには、署名を含むPDFドキュメントを取得します。

PKIランタイムオプションの設定

PDFドキュメント内のすべての署名を検証する際にSignatureサービスで使用する次のPKIランタイムオプションを設定します。

  • 検証時間
  • 失効確認
  • タイムスタンプ値

これらのオプションを設定する際に、検証時間を指定できます。 例えば、現在の時刻(バリデーターのコンピューター上の時刻)を選択し、現在の時刻を使用するように指定できます。 様々な時間値について詳しくは、『AEM Forms APIリファレンス』のVerificationTime列挙値を参照してください。

また、検証プロセスの一環として失効確認を実行するかどうかを指定できます。 例えば、失効確認を実行して、証明書が失効しているかどうかを判断できます。 失効確認オプションについて詳しくは、『AEM Forms APIリファレンス』のRevocationCheckStyle列挙値を参照してください。

証明書に対して失効確認を実行するには、CRLOptionSpecオブジェクトを使用して、証明書失効リスト(CRL)サーバーへのURLを指定します。 ただし、CRLサーバーへのURLを指定しない場合、Signatureサービスは証明書からURLを取得します。

失効確認を実行する際に、CRLサーバーを使用する代わりに、オンライン証明書ステータスプロトコル(OCSP)サーバーを使用できます。 通常、CRLサーバーの代わりにOCSPサーバーを使用する場合は、失効確認の実行が高速になります。 (オンライン証明書ステータスプロトコルを参照)。

Signatureサービスが使用するCRLおよびOCSPサーバーの順序は、「Adobeのアプリケーションとサービス」を使用して設定できます。 例えば、AdobeのアプリケーションおよびサービスでOCSPサーバーを最初に設定した場合は、OCSPサーバーがチェックされ、その後にCRLサーバーがチェックされます。

失効確認を実行しない場合、Signatureサービスは証明書が失効しているかどうかを確認しません。 つまり、CRLおよびOCSPサーバー情報は無視されます。

メモ

CRLOptionSpecOCSPOptionSpecオブジェクトを使用して、証明書で指定されたURLを上書きできます。 例えば、CRLサーバーを上書きするには、CRLOptionSpecオブジェクトのsetLocalURIメソッドを呼び出します。

タイムスタンプとは、署名済みまたは認証済みのドキュメントが変更された時間を追跡するプロセスです。 ドキュメントに署名した後は、誰もドキュメントを変更できません。 タイムスタンプは、署名済みまたは認証済みのドキュメントの有効性を強化するのに役立ちます。 TSPOptionSpecオブジェクトを使用して、タイムスタンプオプションを設定できます。 例えば、タイムスタンププロバイダー(TSP)サーバーのURLを指定できます。

メモ

JavaおよびWebサービスのクイックスタートでは、検証時間はVerificationTime.CURRENT_TIMEに、失効確認はRevocationCheckStyle.BestEffortに設定されます。 CRLまたはOCSPサーバー情報が指定されていないので、証明書からサーバー情報を取得します。

すべての電子署名の取得

PDFドキュメント内のすべての電子署名を検証するには、PDFドキュメントから電子署名を取得します。 すべての署名がリストで返されます。 電子署名の検証の一環として、署名のステータスを確認します。

メモ

単一の電子署名を検証する場合とは異なり、複数の署名を検証する場合は、署名フィールド名を指定する必要はありません。

すべての署名を繰り返し処理

各署名を繰り返し処理します。 つまり、各署名について、電子署名を検証し、署名者のIDと各署名のステータスを確認します。 (「デジタル署名の確認」を参照)。

メモ

ドキュメント全体が要件の場合、すべての署名を繰り返し処理する必要はありません。

関連トピック

Java APIを使用した複数の電子署名の検証

WebサービスAPIを使用した複数の電子署名の検証

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

Java APIを使用した複数の電子署名の検証

Signature Service API(Java)を使用して、複数の電子署名を検証します。

  1. プロジェクトファイルを含める

    Javaプロジェクトのクラスパスに、adobe-signatures-client.jarなどのクライアントJARファイルを含めます。

  2. Signatureクライアントの作成

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクタを使用して SignatureServiceClient オブジェクトを渡すことによって、ServiceClientFactory オブジェクトを作成します。
  3. 検証する署名が含まれているPDFドキュメントを取得します

    • 複数の電子署名が含まれているPDFドキュメントを表すjava.io.FileInputStreamオブジェクトを作成し、そのコンストラクターを使用して検証します。 PDFドキュメントの場所を指定するstring値を渡します。
    • コンストラクタを使用して com.adobe.idp.Document オブジェクトを渡すことによって、java.io.FileInputStream オブジェクトを作成します。
  4. PKIランタイムオプションの設定

    • コンストラクタを使用して PKIOptions オブジェクトを作成します。
    • PKIOptionsオブジェクトのsetVerificationTimeメソッドを呼び出し、検証時間を指定するVerificationTime列挙値を渡すことで、検証時間を設定します。
    • PKIOptionsオブジェクトのsetRevocationCheckStyleメソッドを呼び出し、失効確認を実行するかどうかを指定するRevocationCheckStyle列挙値を渡すことで、失効確認オプションを設定します。
  5. すべての電子署名の取得

    SignatureServiceClientオブジェクトのverifyPDFDocumentメソッドを呼び出し、次の値を渡します。

    • 複数の電子署名を含むPDFドキュメントを含むcom.adobe.idp.Documentオブジェクト。
    • PKIランタイムオプションを含むPKIOptionsオブジェクト。
    • SPI情報を含むVerifySPIOptionsインスタンス。 このパラメーターにはnullを指定できます。

    verifyPDFDocumentメソッドは、PDFドキュメント内のすべての電子署名に関する情報を含むPDFDocumentVerificationInfoオブジェクトを返します。

  6. すべての署名を繰り返し処理

    • PDFDocumentVerificationInfoオブジェクトのgetVerificationInfosメソッドを呼び出すことで、すべての署名を繰り返します。 このメソッドは、 java.util.Listオブジェクトを返します。各要素はPDFSignatureVerificationInfoオブジェクトです。 java.util.Iteratorオブジェクトを使用して、署名のリストを繰り返し処理します。
    • PDFSignatureVerificationInfoオブジェクトを使用して、PDFSignatureVerificationInfoオブジェクトのgetStatusメソッドを呼び出すことで、署名のステータスを判断するなどのタスクを実行できます。 このメソッドは、署名のステータスを通知する静的データメンバーのSignatureStatusオブジェクトを返します。 例えば、署名が不明な場合、このメソッドはSignatureStatus.DocumentSignatureUnknownを返します。

関連トピック

複数の電子署名の検証

クイックスタート(SOAPモード):Java APIを使用した複数の電子署名の検証

AEM Forms Java ライブラリファイルを含める

電子署名の検証

接続プロパティの設定

WebサービスAPIを使用した複数の電子署名の検証

Signature Service API(Webサービス)を使用して、複数の電子署名を検証します。

  1. プロジェクトファイルを含める

    MTOMを使用するMicrosoft .NETプロジェクトを作成します。 次のWSDL定義を使用していることを確認します。http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1.

    メモ

    localhostを、AEM FormsをホストするサーバーのIPアドレスに置き換えます。

  2. Signatureクライアントの作成

    • デフォルトのコンストラクターを使用してSignatureServiceClientオブジェクトを作成します。

    • System.ServiceModel.EndpointAddressコンストラクターを使用してSignatureServiceClient.Endpoint.Addressオブジェクトを作成します。 AEM FormsサービスにWSDLを指定するstring値を渡します(例:http://localhost:8080/soap/services/SignatureService?WSDL)。 lc_version属性を使用する必要はありません。 この属性は、サービス参照を作成する際に使用されます)。

    • SignatureServiceClient.Endpoint.Bindingフィールドの値を取得してSystem.ServiceModel.BasicHttpBindingオブジェクトを作成します。 戻り値を BasicHttpBinding にキャストします。

    • System.ServiceModel.BasicHttpBindingオブジェクトのMessageEncodingフィールドをWSMessageEncoding.Mtomに設定します。 この値は、MTOMが使用されるようにします。

    • 次のタスクを実行して、基本的なHTTP認証を有効にします。

      • フィールドSignatureServiceClient.ClientCredentials.UserName.UserNameにAEM formsユーザー名を割り当てます。
      • 対応するパスワード値をフィールドSignatureServiceClient.ClientCredentials.UserName.Passwordに割り当てます。
      • フィールドBasicHttpBindingSecurity.Transport.ClientCredentialTypeに定数値HttpClientCredentialType.Basicを割り当てます。
      • フィールドBasicHttpBindingSecurity.Security.Modeに定数値BasicHttpSecurityMode.TransportCredentialOnlyを割り当てます。
  3. 検証する署名が含まれているPDFドキュメントを取得します

    • コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、検証する複数の電子署名を含むPDFドキュメントを格納します。
    • コンストラクターを呼び出して、System.IO.FileStreamオブジェクトを作成します。 PDFドキュメントのファイルの場所と、ファイルを開くモードを表すstring値を渡します。
    • System.IO.FileStreamオブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStreamオブジェクトのLengthプロパティを取得することで、バイト配列のサイズを判断できます。
    • System.IO.FileStreamオブジェクトのReadメソッドを呼び出して、バイト配列にストリームデータを入力します。 読み取るバイト配列、開始位置、ストリーム長を渡します。
    • BLOBオブジェクトのMTOMプロパティにバイト配列の内容を割り当てて、オブジェクトを設定します。
  4. PKIランタイムオプションの設定

    • コンストラクタを使用して PKIOptions オブジェクトを作成します。
    • PKIOptionsオブジェクトのverificationTimeデータメンバに検証時間を指定するVerificationTime列挙値を割り当てて、検証時間を設定します。
    • 失効確認オプションを設定するには、 PKIOptionsオブジェクトのrevocationCheckStyleデータメンバに失効確認を実行するかどうかを指定するRevocationCheckStyle列挙値を割り当てます。
  5. すべての電子署名の取得

    SignatureServiceClientオブジェクトのverifyPDFDocumentメソッドを呼び出し、次の値を渡します。

    • 複数の電子署名を含むPDFドキュメントを含むBLOBオブジェクト。
    • PKIランタイムオプションを含むPKIOptionsオブジェクト。
    • SPI情報を含むVerifySPIOptionsインスタンス。 このパラメーターにはnullを指定できます。

    verifyPDFDocumentメソッドは、PDFドキュメント内のすべての電子署名に関する情報を含むPDFDocumentVerificationInfoオブジェクトを返します。

  6. すべての署名を繰り返し処理

    • PDFDocumentVerificationInfoオブジェクトのverificationInfosデータメンバを取得して、すべての署名を繰り返し処理します。 このデータメンバは、Object配列を返します。各要素はPDFSignatureVerificationInfoオブジェクトです。
    • PDFSignatureVerificationInfoオブジェクトを使用すると、PDFSignatureVerificationInfoオブジェクトのstatusデータメンバを取得して、署名の状態を判断するなどのタスクを実行できます。 このデータメンバは、SignatureStatusオブジェクトを返します。このオブジェクトの静的データメンバは、署名の状態を通知します。 例えば、署名が不明な場合、このメソッドはSignatureStatus.DocumentSignatureUnknownを返します。

関連トピック

複数の電子署名の検証

MTOMを使用したAEM Formsの呼び出し

SwaRefを使用したAEM Formsの呼び出し

デジタル署名の削除

新しい電子署名を適用する前に、電子署名を署名フィールドから削除する必要があります。 電子署名は上書きできません。 署名を含む署名フィールドに電子署名を適用しようとすると、例外が発生します。

メモ

Signatureサービスについて詳しくは、『AEM Formsのサービスリファレンス』を参照してください。

手順の概要

署名フィールドから電子署名を削除するには、次のタスクを実行します。

  1. プロジェクトファイルを含めます。
  2. Signatureクライアントを作成します。
  3. 削除する署名が含まれているPDFドキュメントを取得します。
  4. 署名フィールドから電子署名を削除します。
  5. PDFドキュメントをPDFファイルとして保存します。

プロジェクトファイルを含める

必要なファイルを開発プロジェクトに含めます。 Javaを使用してクライアントアプリケーションを作成する場合は、必要なJARファイルを含めます。 Webサービスを使用する場合は、プロキシファイルを必ず含めてください。

次のJARファイルをプロジェクトのクラスパスに追加する必要があります。

  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-signatures-client.jar
  • adobe-utilities.jar(AEM FormsをJBossにデプロイする場合に必要)
  • jbossall-client.jar(AEM FormsをJBossにデプロイする場合に必要)

これらのJARファイルの場所について詳しくは、「AEM Forms Javaライブラリファイルを含める」を参照してください。

Signatureクライアントの作成

Signatureサービスの操作をプログラムで実行する前に、Signatureサービスクライアントを作成する必要があります。

削除する署名を含むPDFドキュメントを取得します

PDFドキュメントから署名を削除するには、署名を含むPDFドキュメントを取得する必要があります。

署名フィールドからの電子署名の削除

PDFドキュメントから電子署名を正常に削除するには、電子署名が含まれる署名フィールドの名前を指定する必要があります。 また、電子署名を削除する権限が必要です。そうしないと、例外が発生します。

PDFドキュメントをPDFファイルとして保存

Signatureサービスが署名フィールドから電子署名を削除した後、PDFドキュメントをPDFファイルとして保存して、AcrobatまたはAdobe Readerで開くことができます。

関連トピック

Java APIを使用した電子署名の削除

WebサービスAPIを使用した電子署名の削除

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

署名フィールドの追加

Java APIを使用した電子署名の削除

署名API(Java)を使用して電子署名を削除するには:

  1. プロジェクトファイルを含める

    Javaプロジェクトのクラスパスに、adobe-signatures-client.jarなどのクライアントJARファイルを含めます。

  2. Signatureクライアントを作成します。

    • 接続プロパティを含む ServiceClientFactory オブジェクトを作成します。
    • コンストラクタを使用して SignatureServiceClient オブジェクトを渡すことによって、ServiceClientFactory オブジェクトを作成します。
  3. 削除する署名を含むPDFドキュメントを取得します

    • 削除する署名が含まれるPDFドキュメントを表すjava.io.FileInputStreamオブジェクトを作成します。その際、コンストラクタを使用して、PDFドキュメントの場所を指定するstring値を渡します。
    • コンストラクタを使用して com.adobe.idp.Document オブジェクトを渡すことによって、java.io.FileInputStream オブジェクトを作成します。
  4. 署名フィールドからの電子署名の削除

    SignatureServiceClientオブジェクトのclearSignatureFieldメソッドを呼び出し、次の値を渡して、署名フィールドから電子署名を削除します。

    • 削除する署名が含まれているPDFドキュメントを表すcom.adobe.idp.Documentオブジェクト。
    • 電子署名が含まれる署名フィールドの名前を指定するstring値です。

    clearSignatureFieldメソッドは、電子署名が削除されたPDFドキュメントを表すcom.adobe.idp.Documentオブジェクトを返します。

  5. PDFドキュメントをPDFファイルとして保存

    • java.io.File オブジェクトを作成し、ファイル拡張子が .pdf であることを確認します。
    • com.adobe.idp.DocumentオブジェクトのcopyToFileメソッドを呼び出します。 java.io.Fileオブジェクトを渡して、com.adobe.idp.Documentオブジェクトの内容をファイルにコピーします。 Document メソッドから返された clearSignatureField オブジェクトを必ず使用してください。

関連トピック

電子署名の削除

クイックスタート(SOAPモード):Java APIを使用した電子署名の削除

AEM Forms Java ライブラリファイルを含める

接続プロパティの設定

WebサービスAPIを使用して電子署名を削除する

署名API(Webサービス)を使用して電子署名を削除します。

  1. プロジェクトファイルを含める

    MTOMを使用するMicrosoft .NETプロジェクトを作成します。 次のWSDL定義を使用していることを確認します。http://localhost:8080/soap/services/SignatureService?WSDL&lc_version=9.0.1.

    メモ

    localhostを、AEM FormsをホストするサーバーのIPアドレスに置き換えます。

  2. Signatureクライアントの作成

    • デフォルトのコンストラクターを使用してSignatureServiceClientオブジェクトを作成します。

    • System.ServiceModel.EndpointAddressコンストラクターを使用してSignatureServiceClient.Endpoint.Addressオブジェクトを作成します。 AEM FormsサービスにWSDLを指定するstring値を渡します(例:http://localhost:8080/soap/services/SignatureService?WSDL)。 lc_version属性を使用する必要はありません。 この属性は、サービス参照を作成する際に使用されます)。

    • SignatureServiceClient.Endpoint.Bindingフィールドの値を取得してSystem.ServiceModel.BasicHttpBindingオブジェクトを作成します。 戻り値を BasicHttpBinding にキャストします。

    • System.ServiceModel.BasicHttpBindingオブジェクトのMessageEncodingフィールドをWSMessageEncoding.Mtomに設定します。 この値は、MTOMが使用されるようにします。

    • 次のタスクを実行して、基本的なHTTP認証を有効にします。

      • フィールドSignatureServiceClient.ClientCredentials.UserName.UserNameにAEM formsユーザー名を割り当てます。
      • 対応するパスワード値をフィールドSignatureServiceClient.ClientCredentials.UserName.Passwordに割り当てます。
      • フィールドBasicHttpBindingSecurity.Transport.ClientCredentialTypeに定数値HttpClientCredentialType.Basicを割り当てます。
      • フィールドBasicHttpBindingSecurity.Security.Modeに定数値BasicHttpSecurityMode.TransportCredentialOnlyを割り当てます。
  3. 削除する署名を含むPDFドキュメントを取得します

    • コンストラクタを使用して BLOB オブジェクトを作成します。BLOBオブジェクトは、削除する電子署名が含まれるPDFドキュメントを保存するために使用されます。
    • コンストラクターを呼び出し、署名済みPDFドキュメントのファイルの場所とファイルを開くモードを表すstring値を渡すことで、System.IO.FileStreamオブジェクトを作成します。
    • System.IO.FileStreamオブジェクトの内容を格納するバイト配列を作成します。 System.IO.FileStreamオブジェクトのLengthプロパティを取得することで、バイト配列のサイズを判断できます。
    • System.IO.FileStreamオブジェクトのReadメソッドを呼び出して、バイト配列にストリームデータを入力します。 読み取るバイト配列、開始位置、ストリーム長を渡します。
    • BLOBオブジェクトのMTOMプロパティにバイト配列の内容を割り当てて、オブジェクトを設定します。
  4. 署名フィールドからの電子署名の削除

    SignatureServiceClientオブジェクトのclearSignatureFieldメソッドを呼び出し、次の値を渡して、デジタル署名を削除します。

    • 署名済みPDFドキュメントを含むBLOBオブジェクト。
    • 削除する電子署名が含まれる署名フィールドの名前を表すstring値です。

    clearSignatureFieldメソッドは、電子署名が削除されたPDFドキュメントを表すBLOBオブジェクトを返します。

  5. PDFドキュメントをPDFファイルとして保存

    • コンストラクターを呼び出し、空の署名フィールドとファイルを開くモードを含むPDFドキュメントのファイルの場所を表すstring値を渡して、System.IO.FileStreamオブジェクトを作成します。
    • signメソッドで返されたBLOBオブジェクトの内容を格納するバイト配列を作成します。 BLOBオブジェクトのMTOMデータメンバーの値を取得して、バイト配列を設定します。
    • コンストラクターを呼び出し、System.IO.FileStreamオブジェクトを渡して、System.IO.BinaryWriterオブジェクトを作成します。
    • System.IO.BinaryWriterオブジェクトのWriteメソッドを呼び出し、バイト配列を渡すことにより、バイト配列の内容をPDFファイルに書き込みます。

関連トピック

電子署名の削除

MTOMを使用したAEM Formsの呼び出し

SwaRefを使用したAEM Formsの呼び出し

このページ