У меня есть тысячи документов PDF, подписанных и помеченных с помощью iText.
По юридическим причинам мне теперь нужно иметь возможность извлекать из любого PDF-файла все данные, относящиеся к временной метке (включая дату / время, конечно, нотакже имя TSA, его публичный сертификат, подписанный хэш и используемый алгоритм).
Я могу определить, действительно ли PDF помечен меткой времени, и извлечь дату / время с помощью следующего фрагмента кода (вдохновленного однимнайдено здесь ):
AcroFields acroFields = reader.getAcroFields();
List<String> names = acroFields.getSignatureNames();
String sigName = names.get(names.size() - 1);
PdfPKCS7 pdfPkcs7 = acroFields.verifySignature(sigName);
for (String name: names) {
System.out.printf("Signature : %s\n", name);
if (pdfPkcs7.getTimeStampDate() != null) {
SimpleDateFormat date_format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS");
System.out.println("Signed on: " + date_format.format(pdfPkcs7.getSignDate().getTime()));
System.out.println("TimeStamp: " + date_format.format(pdfPkcs7.getTimeStampDate().getTime()));
System.out.println("Timestamp token : " + pdfPkcs7.getTimeStampToken().toString());
System.out.println("Timestamp verified : " + pdfPkcs7.verifyTimestampImprint());
System.out.println("Subject: " + pdfPkcs7.getSigningCertificate());
} else {
System.out.println("No timestamp found");
}
Я думал, что моя цель может быть легко достигнута с помощью функций getTimeStampToken () и getSigningCertificate () ... Фактически getTimeStampToken()
возвращает что-то вроде org.bouncycastle.tsp.TimeStampToken@59f55efc
, а getSigningCertificate()
возвращает информацию, относящуюся к сертификату, используемому для подписи документа, который не имеет ничего общего с сертификатом, используемым TSA.
Может ли кто-нибудь помочь мне получить ожидаемый результат?