提问人:Tanmay Sharma 提问时间:10/5/2023 更新时间:10/5/2023 访问量:47
使用 pdfbox 查找签名时间戳属性中存在的时间戳令牌的证书信息
Find Certificate information of timestamp token present in signature timestamp attribute using pdfbox
答:
2赞
mkl
10/5/2023
#1
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
评论