Проверка метки времени с помощью iText 2.1.7
Я пытаюсь проверить наличие метки времени для данной подписи файла PDF. Пока я пришел к этому коду:
RandomAccessFileOrArray random =
new RandomAccessFileOrArray(new File("temp.pdf").getAbsolutePath());
PdfReader reader = new PdfReader(random, null);
AcroFields af = reader.getAcroFields();
ArrayList<?> names = af.getSignatureNames();
//this are the signatures?
for (Object o : names){
AcroFields.Item item = (Item) af.getFields().get((String)o);
//this is the class for verifying the signature,
//how do I get it from the item?
PdfPKCS7 pdfPKCS7 = null; //XYZ ???
Calendar signingDate = pdfPKCS7.getTimeStampDate();
}
Я, очевидно, получил доступ к подписи, но мне нужно получить класс PdfPKCS7 для проверки подписи. У кого-нибудь есть идеи, как мне туда добраться?
1 ответ
Решение
Вы должны использовать AcroFields
метод verifySignature(String name)
который возвращает PdfPKCS7
объект для продолжения проверки.
JavaDocs этого метода показывает пример его использования:
KeyStore kall = PdfPKCS7.loadCacertsKeyStore();
PdfReader reader = new PdfReader("my_signed_doc.pdf");
AcroFields af = reader.getAcroFields();
ArrayList names = af.getSignatureNames();
for (int k = 0; k < names.size(); ++k) {
String name = (String)names.get(k);
System.out.println("Signature name: " + name);
System.out.println("Signature covers whole document: " + af.signatureCoversWholeDocument(name));
PdfPKCS7 pk = af.verifySignature(name);
Calendar cal = pk.getSignDate();
Certificate pkc[] = pk.getCertificates();
System.out.println("Subject: " + PdfPKCS7.getSubjectFields(pk.getSigningCertificate()));
System.out.println("Document modified: " + !pk.verify());
Object fails[] = PdfPKCS7.verifyCertificates(pkc, kall, null, cal);
if (fails == null)
System.out.println("Certificates verified against the KeyStore");
else
System.out.println("Certificate failed: " + fails[1]);
}
Здесь вы можете легко добавить дополнительный код, используя PdfPKCS7
пример.
Ceterum censeo... если вы не связаны с этой древней версией iText (например, из-за проблем совместимости или лицензии), вам следует рассмотреть возможность обновления до текущей версии.