web-dev-qa-db-ja.com

PDF using Java

USBトークンやHSMなどに保存されている証明書を使用してPDFファイルにデジタル署名したい。JAVAを使用してUSBトークンに保存されている秘密鍵を使用するにはどうすればよいですか?

8
rajuthoutu

iText 自己参照に、追加します

8
Steve Mitchell

PDFファイルへのデジタル署名の追加に関連する手順:

(I)テンプレートPDFDocumentを作成します:

テンプレート署名付きのPDFDocumentを作成します。

PDSignature pdSignature;
pdSignature.setByteRange(new int[]{0, 0, 0, 0});
pdSignature.setContents(new byte[n*1024]);

ここで、nは整数、つまりkbの倍数です。

注:コンテンツサイズは、署名と証明書ファイルの長さの合計以上である必要があります。

(II)テンプレートを更新するPDFドキュメント:

(a)/ ByteRange [a b c d]を更新します:
(i)a = "%PDF"の%のオフセット(= 0、デフォルト)
(ii)b = "/ Contents <000 ... 000>"の<のオフセット
(iii)c =「/ Contents <000 ... 000>」の>のオフセット
(iv)d =「%% EOF」のFのオフセットから上からcを引いたもの

(b)外部参照セクションの更新:
オブジェクトの位置を指定する相互参照テーブル(外部参照セクション)を更新し、

(c)startxrefセクションを更新します。
相互参照テーブル(xref)の開始のオフセットであるstartxrefを更新します。

(III)更新されたテンプレートドキュメントのデジタル署名を生成します。
「/ Contents <000 ... 000>」の一時的な署名済みデータ(「000 ... 000」)を除く、更新されたテンプレートドキュメントの生成

(IV)コンテンツの更新<>セクション:
「/ Contents <000 ... 000>」の署名済みデータの長さの最初/最初の「0」を、テンプレートPDFFileの署名済みデータ(エンベロープ)に置き換えます。

提案:

PDFBoxのSignatureInterfaceを使用します:

(a)sign()メソッドを呼び出すためのSignatureInterfaceを実装します(b)入力、出力ファイル、キーストア、エイリアス、ピンを提供します(c)増分を保存します

(または)任意のJava pdfライブラリ(iTextなど)を使用します...)

(または)ステップI〜IVをJava自分で実装します。

7
AVA

USBトークン、スマートカード、またはハードウェアセキュリティモジュールを使用してPDFにデジタル署名したいようです。これは、 http:/)で説明されているようにPKCS#11を介して行われます。 /itextpdf.com/book/digitalsignatures ソースコードを見つけることができます こここれ はSafeNet iKey 400USBトークンを使用して署名する方法を示す例です。

4
Bruno Lowagie