web-dev-qa-db-ja.com

PDFファイルに手動でデジタル署名を追加する標準的な方法は?

自分で使用するためにいくつかの証明書を作成しましたが、デジタル署名が含まれている証明書を作成することになると困ります。まず、共通のフィールドだけでなく、デジタル署名も含む標準の証明書を作成するにはどうすればよいでしょうか。次に、この証明書を対応するPDFファイルにデータとして手動で追加するにはどうすればよいですか?

ありがとう!

15
roman canada

他の回答へのコメントによると、あなたは実際にしたいです

[your]証明書を使用してPDFファイルに署名し、この署名を保存して、署名した[You] PDFに追加します。

(ところで、証明書自体ではなく、証明書の公開鍵に関連付けられた秘密鍵で署名しますが、それは詳細です。)

標準に準拠するようにPDFビューア(例:Adobe Reader)で署名をPDFに "追加"したいと思います。 )は、統合されたPDF署名として認識、表示、および検証します。

その場合、元のPDFにそのまま署名することにより、すでに間違って開始しており、ファイルにその署名を何らかの方法で追加するだけでよいと考えています。代わりに、PDF文書を含む新しいリビジョンを作成する必要があります。これにはPDF AcroForm署名フィールドが含まれ、その値は/ Contentsエントリに含まれる署名辞書です/ Contentsエントリの内容を除いて、新しいリビジョン全体の署名。

Signature embedded in PDF

複数の署名をPDFに統合する場合、これはPDFの増分更新によって行われます(単一の統合されたCMS署名コンテナーに複数のSignerInfo構造を追加することにより、明示的にnot!) :

Multiple signatures and incremental updates

これは、Adobeのドキュメント PDFのデジタル署名 で非常にグラフィカルに説明されています。さらに、PDF仕様で指定されていますISO 32000-1:2008が利用可能になりました ここではAdobe セクション12.8デジタル署名

ただし、注意してください。仕様は言う:

バイト範囲ダイジェストは、ファイル内のバイトの範囲にわたって計算されます。これは、署名辞書のByteRangeエントリによって示されます。 この範囲は、シグネチャディクショナリを含むがシグネチャ値自体(コンテンツエントリ)を除くファイル全体である必要があります。他の範囲を使用することもできますが、それらはドキュメントに対するすべての変更をチェックしないため、その使用はお勧めしません。

これにより、最初に元のPDFの署名を作成してから、その署名を保持する新しいリビジョンを追加して、署名されたバイトの範囲に元のリビジョンのみが含まれ、署名のみの拡張リビジョンは含まれないことを示すようです。

ただし実際には、PDFビューア(特にAdobe Reader)は、署名された範囲が署名辞書を含むがファイル全体を除外するという推奨事項に従う署名のみを受け入れます。署名値自体

より新しい仕様、例えばETSI PAdES仕様ETSI TS 102 778( パート2のセクション5.1アイテムb および パート3のセクション4.2アイテムc を参照)でさえ、この推奨事項を公式に要件とし、 ISO 32000-2も同様です。

プログラミングコンテキストに応じて、統合されたPDF署名の作成をサポートする多くのPDFライブラリと、これらのライブラリを使用する多くの製品があります。それらのいくつかは無料の主題のためにさえ利用可能です。 AGPLに。

24
mkl

証明書はユーザーに登録され、フィールドには詳細が入力されているため、証明書はデジタル署名です。証明書にデジタル署名を追加しません。

CAが発行する証明書(作成可能)が必要です。次に、証明書を信頼できる証明書に追加します(自己署名されているか、標準の認識されているCAからのものでない場合)。 PDFファイルを作成するとき、その証明書でファイルに署名するオプションがあります。その証明書の署名はあなたのデジタル署名です...

2009年からのまともなハウツーがここにありますが、まだ有効です: http://blog.didierstevens.com/2009/01/04/howto-add-a-digital-signature-to-a-pdf-ファイル/

1
AndyMac

certificate には常に署名が含まれていますが、一部のPDF文書には含まれていません。この署名は証明書の不可欠な部分であり、証明書を発行したCAによって計算されました。これは、この署名を検証することにより、任意のソフトウェアが証明書の内容をある程度信頼できることを示しています。これはすべて、PDFファイルとは無関係に発生し、PDFファイルが存在する前に古くなる可能性があります。

「証明書を使用して」ドキュメントに署名する場合、実際にはPDFの署名を秘密鍵で計算しています-秘密鍵は証明書に含まれていませんが、証明書には対応する公開鍵が含まれています。次に、署名自体と証明書のコピーをPDFファイルに含める必要があります。

Adobeドキュメント 署名は、ReaderおよびAcrobat製品で計算できます。 どうやら もフリーソフトウェアでできる。

1
Tom Leek

あなたの質問は本当に2つの異なる質問です。信頼の連鎖が必要な場合にのみ、証明書に別の証明書で署名する必要があります。たとえば、ルートCAは発行する証明書に署名するので、証明書を検証しようとする誰もが、CAによって信頼されていることがわかります。証明書署名を許可する任意の証明書を使用して、この種の連鎖を行うことができます。

一方、ドキュメントの場合は、クライアント認証が承認された証明書のみが必要です。独自のCAを実行している場合、証明書はおそらく何らかの目的で承認されますが、他のユーザーからの信頼は失われます。 PDFに署名するには、証明書をAcrobatにインポートし、IDを使用してドキュメントに署名するだけです。

1
AJ Henderson

PDFに署名したい場合、ほとんどのPDFライター、および一部のバージョンのリーダー専用には、署名用のメカニズムが組み込まれているものもあれば、タイムスタンプ用のものさえあります。証明書ファイルを提供するように求められ、ファイルにデジタル署名が適用されます。特にPDFには、このメカニズムがフォーマットに組み込まれていますが、あらゆる種類のファイルに署名することも可能です。初心者がPDFに署名する際に注意する必要がある重要な点の1つは、ページにマークを付けなくてもPDFに署名できることです。署名は実際にはメタデータであり、ページ上の任意のタイプのマーキングはオプションです。

Adobeは PDFへの署名方法に関するビデオチュートリアル を提供しています。 Adobeサイトで その他のドキュメント を読むこともできます。

コマンドラインツールを使用してファイルのデジタル署名を行うこともできますが、プロセスに慣れていない場合は、 PortableSigner または j4sign などのプログラムがうまく機能する可能性があります。 SourceForgeとGithubを参照して、ニーズを満たす他の適用可能なプロジェクトを探すことができます。

1
Eric G