当前位置: 首页 > 知识库问答 >
问题:

在PDF签名中包含时间戳的步骤

华宪
2023-03-14

美好的一天,

我试图将时间戳信息嵌入到pdf签名中,这样adobe会向我报告签名是时间戳。目前,我所做的就是Adobe报告“签名包括嵌入的时间戳,但无法验证”,当你查看日期/时间属性时,它会说“时间戳授权”不可用,“显示证书”变灰。

显然,我在构建PKCS#7消息时犯了错误。但我现在不知道该怎么办。有人能帮我描述一下我需要采取的步骤吗?这样我的签名就会有时间戳?或者建议一个能帮我找到问题的工具?

我正在使用密码应用编程接口。我目前遵循的步骤如下:

  1. 使用CryptHashMessage函数(SHA256)创建pdf数据摘要
  2. 使用CryptRetrieveTimeStamp函数将此摘要发送给TSA。我已经设置了*TIMESTAMP\u DONT\u HASH\u DATA*标志,这样就不会再次对摘要进行哈希
  3. 来自TSA的repsonse作为未经身份验证的属性添加到*CRYPT_SIGN_MESSAGE_PARA*结构中,签名时间作为已身份验证的属性添加
  4. 然后我使用CryptSignMessage函数对使用上述结构的原始数据进行签名

我如何检查数据是否正确,以便adobe向我显示签名已加盖时间戳?

你好,玛格达

共有2个答案

祁嘉瑞
2023-03-14

时间戳不正确。请检查我的mime库。您需要添加一个带有oID“1.2.840.113549.1.9.16.2.14”的未经验证的字段。

燕朝明
2023-03-14

简而言之:你在错误的数据上打时间戳,请看答案的底部。

您的签名与Adobe签名的主要区别:

>

  • Adobe的签名包含已签名的吊销信息属性;此属性不包含任何实际的吊销信息。

    因为这个属性是可选的,所以在这里不应该是相关的。

    您的签名包含签名时间属性。

    由于还嵌入了时间戳,所以不需要签名时间,但也不禁止。

    您的签名具有1.2.840.113549.1.1.1的Signature算法值,即RSA加密,而Adobe的1.2.840.113549.1.1.11,即sha256RevRSAEncryption

    在这里,Adobe的选择无疑是更好的选择,但是Adobe Reader似乎忽略了您签名中的缺陷:毕竟,它说文档自签名以来没有被更改过。

    在您的签名中,时间戳为PDF文档的散列打上戳,即与签名的signed messageDigest属性相同,而在Adobe的签名中,时间戳为另一个标记。

    猛敲这就是问题所在。诚然,你在最初的问题中说了这句话,但没有引起我的注意:

    >

  • 使用CryptHashMessage函数(SHA256)创建pdf数据摘要。

    使用CryptRetrieveTimeStamp函数将此摘要发送给TSA。我已经设置了TIMESTAMP_DONT_HASH_DATA标志,这样就不会再次对摘要进行哈希。

    这是错误的!时间戳是作为无符号属性添加的,根据规范:

    作为无符号属性的时间戳信息(PDF 1.6):时间戳令牌应符合RFC 3161,并应按照RFC 3161附录A中的描述计算并嵌入PKCS#7对象。

    (ISO 32000-1第12.8.3.3.1节)

    *And RFC 3161 states:*
    

    TimeStampToken中messageImprint字段的值应是SignerInfo中签名字段的值的散列,用于标记时间的签名数据。

    (RFC 3161附录A)

    *Thus, **you are time stamping the wrong hash!** Adobe correctly expects you to time stamp the signature. So you should first create a regular signature, then look up its signature value, hash & time stamp that value, and then add that time stamp to the signature container signer info as unsigned time stamp attribute.*
    
    *Unfortunately I don't know the Windows Crypto API well enough to explain how to do that; I'm more at home in the Java crypto api.*
    

  •  类似资料:
    • 我尝试使用外部Web服务对pdf进行数字签名。此Web服务包含用户证书,用户可以使用他们的凭据和一次性密码生成的代码访问该证书。 旁注:web服务应该期望pdf摘要(哈希),但奇怪的是,它却接受整个文件。 无论如何,实现如下: pdf已成功签名,但使用Adobe Reader并检查签名字段时,似乎缺少可信时间戳,如图所示: 看起来,来自远程服务的响应是一个签名对象,我只需要将其嵌入到PDF文件中。

    • 问题内容: 我需要更改此代码,以使X轴包含格式为“ H:M”的时间戳,例如10:00。 问题答案: 使用与合适的轴:

    • 我在使用可信时间戳创建Bouncy Castle的有效CMS签名时遇到了问题。签名创建工作正常(我想将签名包含到PDF文件中),签名是有效的。但是在我将可信时间戳包含到签名的无符号属性表后,签名仍然有效,但是读者报告签名包括嵌入的时间戳,但它是无效的。这让我相信,哈希I时间戳不是正确的,但我似乎无法弄清楚它的问题。 签署代码: 代码: : 谢谢你的帮助! 示例文件: 签名PDF 未签名的PDF 用

    • 问题内容: 我在使用受信任的时间戳与Bouncy Castle创建有效的CMS签名时遇到问题。签名创建工作良好(我想将签名包括到PDF文件中),签名有效。但是,当我在签名的未签名属性表中添加可信时间戳后,签名仍然保持有效,但是Reader会报告 该签名包括嵌入式时间戳,但是无效 。这使我相信,哈希时间戳是不正确的,但是我似乎无法弄清楚问题出在哪里。 签名代码: 该代码: : 谢谢你的帮助! 示例文

    • 问题内容: 我正在使用NetBeans将数据导出到Java应用程序中的文件中。该文件将具有我在代码中给定的硬编码名称。请在下面的代码中找到。 我想在生成的文件名上附加日期和时间戳,以便创建的每个文件都是唯一的文件。如何实现呢? 问题答案: 使用和拆分以保持文件扩展名: 更新: 如果您能够修改变量,我的建议是:

    • 我有一个签名的PDF文件。有了这个功能,它利用了iTextSharp库,我找到了证书p7m签名: 现在...我如何提取与签名相关的图像(位图)?可能吗?谢谢,路易吉