我刚刚为我的pdf添加了时间戳。签名有效。 timestamp令牌也是正确的(我已经检查过)。但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中可能缺少某些内容?证书或类似的东西?
答案 0 :(得分:2)
签名时间戳中的邮件印记似乎不正确。预计在此消息印记中具有签名值的SHA256。
SHA256的签名价值:1b4532052d612ca32ae96b9a8e7aa6d64ae6c69dc00e1b7b31394ac3b54c4049
时间戳令牌中的消息印记:E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855
希望这有帮助
Moez