Java で PDF ファイルにデジタル署名を添付し、信頼できるタイムスタンプ機関でこのファイルにタイムスタンプを付けたいと考えています。
どうすればいいですか?
Java で PDF ファイルにデジタル署名を添付し、信頼できるタイムスタンプ機関でこのファイルにタイムスタンプを付けたいと考えています。
どうすればいいですか?
秘密鍵を含むデジタル証明書を pfx ファイルにエクスポートします。
BouncyCastle で iText を使用する:
Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter.getInstance(document, baos);
document.open();
document.add(new Paragraph("Hello World!"));
document.close();
PdfReader reader = new PdfReader(baos.toByteArray());
OutputStream os = new FileOutputStream("c:\\temp\\sign\\test.pdf");
PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');
// Creating the appearance
PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
appearance.setReason("REASON");
appearance.setLocation("LOCATION");
appearance.setVisibleSignature(new Rectangle(36, 748, 144, 780), 1, "sig");
Security.addProvider(new BouncyCastleProvider());
FileInputStream fis = new FileInputStream("c:\\ssl\\test.pfx");
String password = "myPassword";
KeyStore ks = KeyStore.getInstance("pkcs12");
ks.load(fis, password.toCharArray());
String alias = ks.aliases().nextElement();
PrivateKey pk = (PrivateKey) ks.getKey(alias, password.toCharArray());
X509Certificate cert = (X509Certificate) ks.getCertificate(alias);
TSAClient tsc = new TSAClientBouncyCastle("http://timestampserverURL/");
ExternalDigest digest = new BouncyCastleDigest();
ExternalSignature signature = new PrivateKeySignature(pk, "SHA-1", "BC");
MakeSignature.signDetached(appearance, digest, signature, new Certificate[] { cert }, null, null, tsc, 0,
CryptoStandard.CMS);
Maven の依存関係:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.49</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcmail-jdk15on</artifactId>
<version>1.49</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bctsp-jdk15on</artifactId>
<version>1.46</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.2</version>
</dependency>
HTTP RESTful インターフェイス経由でSecur APIを使用できます。
適用されるタイムスタンプは RFC3161 分離形式であり、すべてのタイムスタンプは EU で認定された認定認証機関によって発行されます。
免責事項: securo の共同創設者
DigiStamp は、SecureTime API ツールキットで PDF 署名およびタイムスタンプ機能を提供します。無料のテスト アカウントを作成すると (そしてテスト サーバーにアクセスできるようになります)、リンクが表示されます。このツールキットは、BouncyCastle と古い無料バージョンの iText を利用しています。
Qoppa には、さまざまな PDF 機能を備えた新しいツールキットがありますが、その使用は有料です。
免責事項: 私は DigiStamp で働いています