使用 pdfbox 查找签名时间戳属性中存在的时间戳令牌的证书信息

问题描述 投票:0回答:1

文档经过数字签名。在签署文档时,时间戳令牌作为签名时间戳属性嵌入。我们如何使用pdfbox找到该时间戳令牌的证书信息

certificate pdfbox digital-signature timestamping
1个回答
0
投票

PDFBox 允许您“提取 PDF 中嵌入的签名容器”。要分析该签名容器,您需要使用不同的库。 PDFBox 示例使用 BouncyCastle。这也是你的选择吗? 如果是,只需查看 PDFBox 示例

ShowSignature

:

    showSignature
  • 加载PDF,识别签名字典,提取嵌入的签名容器和签名数据;和
  • verifyPKCS7
  • 使用 BouncyCastle 分析签名容器并验证签名本身和(如果存在)签名时间戳。
    
    
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
字段的描述。)

© www.soinside.com 2019 - 2024. All rights reserved.