iText で署名され、タイムスタンプが付けられた何千もの PDF ドキュメントがあります。
法的な理由から、タイムスタンプに関連するすべてのデータを 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 によって使用されます。
期待される結果を得るのに役立つものはありますか?