我刚刚在我的pdf中添加了时间戳。签名有效。时间戳记令牌也正确(我已经检查过)。但是adobe读者告诉我“签名包含嵌入式时间戳,但无法验证”。
AttributeTable unsigned = signerInformation.getUnsignedAttributes();
Hashtable<ASN1ObjectIdentifier, Attribute> unsignedAttrHash = null;
if (unsigned == null) {
unsignedAttrHash = new Hashtable<ASN1ObjectIdentifier, Attribute>();
} else {
unsignedAttrHash = signerInformation.getUnsignedAttributes().toHashtable();
}
unsignedAttrHash.put(PKCSObjectIdentifiers.id_aa_signatureTimeStampToken, signatureTimeStamp);
SignerInformation newSignertInformation = SignerInformation.replaceUnsignedAttributes(si, new AttributeTable(unsignedAttrHash));
我找到this code at stackowerflow. ,它起作用了。这是正确的代码。最后,我有了新的SignerInformationStore和新的CMS签名数据,像这样
CMSSignedData.replaceSigners(oldCMSSignedData, newSignerStore);
但是也许我的PDF中缺少某些内容?证书还是类似的东西?
签名时间戳中的消息标记似乎不正确。在此消息印记中应该具有签名值的SHA256。
签名值的SHA256:1b4532052d612ca32ae96b9a8e7aa6d64ae6c69dc00e1b7b31394ac3b54c4049]
时间戳记令牌中的消息标记:E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855
希望这会有所帮助
Moez
嗨,我对此有相同的问题,我理解您的意思,但是我不知道如何在SHA256中使用SHA256对签名值进行哈希处理,我在项目中使用pdf文档对SHA256进行哈希处理,然后使用Adobe软件验证签名注意到时间戳证书不可用,希望给我一些帮助,非常感谢!