Я прочитал много вопросов / ответов о том, как включить PDF PDF с использованием iTextНи один из них не работал для меня.У меня есть пара PDF, и я устанавливаю поле подписи, которое затем использую для вызова метода signDetached и подписания PDF.Я использую:
signer.signDetached(new BouncyCastleDigest(), pks, chain,
Collections.singleton(crlClient), ocspClient, tsc,0, subfilter);
Но ничего не произошло.Я прочитал, что вы должны включить все сертификаты, кроме root.Я добавляю цепочку моего частного сертификата (который я использую для подписи в формате pdf), но я не нашел возможного способа включить сертификат TSA.
Я использую версию iText 7.X .
KeyStore ks = getKeyStore();
Certificate[] chain = null;
Enumeration<String> al = ks.aliases();
for (Enumeration<String> l = al; l.hasMoreElements();) {
String alias = (String) l.nextElement();
chain = ks.getCertificateChain(alias);
}
PrivateKey pk = (PrivateKey) ks.getKey(ks.aliases().nextElement(), "******".toCharArray());
IExternalSignature pks = new PrivateKeySignature(pk, digestAlgorithm, BouncyCastleProvider.PROVIDER_NAME);
OCSPVerifier ocspVerifier = new OCSPVerifier(null, null);
OcspClientBouncyCastle ocspClient = new OcspClientBouncyCastle(ocspVerifier);
String url = CertificateUtil.getCRLURL((X509Certificate) chain[0]);
CrlClientOnline crlClient = new CrlClientOnline(url);
try {
signer.signDetached(new BouncyCastleDigest(), pks, chain, Collections.singleton(crlClient), ocspClient, tsc,
0, subfilter);
} catch (Exception ex) {
System.out.println("Tzizzzzzzzzzzzzzzz" + ex.getCause());
}
private KeyStore getKeyStore()
throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException {
KeyStore ks = KeyStore.getInstance("pkcs12");
ks.load(new FileInputStream("tsaPath"), "****".toCharArray());
ks.load(new FileInputStream("p12Path"), "*******".toCharArray());
return ks;
}