stackoverflowに関するいくつかの類似の質問がありますが、私は悲しいことに解決策には出ませんでした。私はかなり近いと思うが、正しいステップを欠いている。eid-commonsとitextを使用する - 有効な署名を使ってプログラムで署名する
私は自分のベルギーのEIDカードを使用しています。このカードには署名証明書があり、これを使ってPDFに署名できます。
Mavenのライブラリを使用:
be.fedict.commons-eid - 0.6.5
com.itextpdf - 5.5.10
org.bouncycastle - 1.55
コードを次のようになります。
BeIDCardManager manager = new BeIDCardManager();
manager.addBeIDCardEventListener(new BeIDCardEventsListener() {
public void eIDCardInserted(CardTerminal arg0, BeIDCard arg1) {
log.info("Inserted");
try {
dostuffwithmycard(arg1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
...
protected static void dostuffwithmycard(BeIDCard card) throws IOException, DocumentException, GeneralSecurityException {
Security.addProvider(new BeIDProvider());
KeyStore keyStore = KeyStore.getInstance("BeID");
keyStore.load(null, null);
PrivateKey authnPrivateKey = (PrivateKey) keyStore.getKey("Authentication", null);
Signature signature = Signature.getInstance("SHA1withRSA");
signature.initSign(authnPrivateKey);
PdfReader reader = new PdfReader("C:\\Untitled.pdf");
FileOutputStream os = new FileOutputStream("C:\\temp\\Signed.pdf");
PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');
PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
appearance.setReason("Okay");
appearance.setLocation("Home");
appearance.setVisibleSignature(new Rectangle(36,748,144,780), 1, "sig");
ExternalDigest digest = new BouncyCastleDigest();
ExternalSignature sig = new PrivateKeySignature(authnPrivateKey, "SHA1", "BeIDProvider");
MakeSignature.signDetached(appearance, digest, sig, keyStore.getCertificateChain("Signature"), null, null, null, 0, CryptoStandard.CMS);
}
私は基本的に試行錯誤を使用して一緒にこのコードを構築しました。 PINを入力して署名証明書のロックを解除した後で実際にPDFに署名を付けることができるようにしましたが、PDFを開くと署名が無効であることがわかります。私は署名に私の名前を見ることができますが、私は、Adobe Readerでそれを検証しようとすると、私は0x2726
は私が間違ってやっている何かがあるに違いありませんエラーで迎えていますが、私は見つけることができませんでした決定的な理由。
で
PrivateKey authnPrivateKey = (PrivateKey) keyStore.getKey("Authentication", null);
を交換してください、あなたは、サンプル署名付きファイルを共有することはできますか?それは私がitext 5.5.10が別の弾力のある城のバージョンを使用して建てられたと思うかと尋ねられました。バージョンとのマッチングを試みましたか? – mkl私は、あなたのstackoverflowプロファイルで提供した電子メールアドレスであなたに署名したpdfsを電子メールで送信しようとしました – arnehehe
iTextはBouncyCastle 1.49を使用します。そして、私はすでにbeidとpdfファイルに署名するプロジェクトがあると思う、私はオフィスにいるときにそれを調べるだろう。 –