我刚刚签署了一份文件。签署者凭证有一个出版者中继凭证,而中继的出版者是根凭证。我签署文件,并看到该凭证的完整链接。但当我在PDF档案总管中看到时,只有签署者凭证:
我需要那个证书链。我打算用PDFbox把它们弄出来,但我不知道它在哪里。
ilmyapht1#
您可以在ShowSignature.javaPDFBox源代码download的examples子项目或repository中的www.example.com示例中找到显示证书链的代码。下面是从那里精简的一些代码,这些代码仅适用于某些签名子类型(adbe.pkcs7.detached和ETSI.CAdES.detached,其他的可以在上面提到的示例中看到):
try (PDDocument document = PDDocument.load(file)) { for (PDSignature sig : document.getSignatureDictionaries()) { COSDictionary sigDict = sig.getCOSObject(); COSString contents = (COSString) sigDict.getDictionaryObject(COSName.CONTENTS); CMSSignedData signedData = new CMSSignedData(contents.getBytes()); Store<X509CertificateHolder> certificatesStore = signedData.getCertificates(); JcaX509CertificateConverter certificateConverter = new JcaX509CertificateConverter(); Collection<X509CertificateHolder> matches = certificatesStore.getMatches(null); System.out.println("Certificates in chain: " + matches.size()); System.out.println(); int n = 0; for (X509CertificateHolder certificateHolder : matches) { ++n; X509Certificate certificate = certificateConverter.getCertificate(certificateHolder); System.out.println("Certificate " + n + ":"); System.out.println(certificate); System.out.println(); } } }
ShowSignature.java示例提供了更多功能:它检查签名的有效性、签名是否覆盖整个文档,并(2.0.13中的新功能)检查包括撤销(OCSP或CRL)在内的整个证书链。
1条答案
按热度按时间ilmyapht1#
您可以在ShowSignature.javaPDFBox源代码download的examples子项目或repository中的www.example.com示例中找到显示证书链的代码。
下面是从那里精简的一些代码,这些代码仅适用于某些签名子类型(adbe.pkcs7.detached和ETSI.CAdES.detached,其他的可以在上面提到的示例中看到):
ShowSignature.java示例提供了更多功能:它检查签名的有效性、签名是否覆盖整个文档,并(2.0.13中的新功能)检查包括撤销(OCSP或CRL)在内的整个证书链。