文档经过数字签名。在签署文档时,时间戳令牌作为签名时间戳属性嵌入。我们如何使用pdfbox找到该时间戳令牌的证书信息
PDFBox 允许您“提取 PDF 中嵌入的签名容器”。要分析该签名容器,您需要使用不同的库。 PDFBox 示例使用 BouncyCastle。这也是你的选择吗? 如果是,只需查看 PDFBox 示例
ShowSignatureshowSignature
verifyPKCS7
verifyPKCS7
中用于
查找该时间戳令牌的证书信息的相关代码为:
private void verifyPKCS7(InputStream signedContentAsStream, byte[] contents, PDSignature sig) throws ...
{
CMSProcessable signedContent = new CMSProcessableInputStream(signedContentAsStream);
CMSSignedData signedData = new CMSSignedData(signedContent, contents);
...
Collection<SignerInformation> signers = signedData.getSignerInfos().getSigners();
SignerInformation signerInformation = signers.iterator().next();
...
TimeStampToken timeStampToken = SigUtils.extractTimeStampTokenFromSignerInformation(signerInformation);
X509Certificate certFromTimeStamp = SigUtils.getCertificateFromTimeStampToken(timeStampToken);
certFromTimeStamp
就是您正在寻找的证书。
但请注意,根据 TSA 请求时间戳的方式,证书可能不会嵌入时间戳中。在这种情况下,上面的代码找不到它,并且您应该已经拥有证书。 (详细信息请参见RFC 3161中
certReq
结构的TimeStampReq
字段的描述。)