繁体   English   中英

PDF 签名验证失败

[英]PDF Signature fails verification

我正在使用 iTextSharp.LGPLv2 签署 PDF 文档(.Net Core 目前唯一可用的选项)。 我能够产生签名,但大多数读者拒绝它。 您可以下载文件: https://www.dropbox.com/s/ns35fdi5tyq52cw/blank.bs.pdf?dl=0

几个重要的问题:

  • Adobe Reader 和 Foxit 都拒绝签名说“文档已被更改......”
  • 签名使用“adbe.pkcs7.detached”的子过滤器。 如果更改为“ETSI.CAdES.detached”,则 Foxit 认为签名正常 读者没有。
  • SHA256 用于所有散列目的。
  • 看起来 ByteRange 设置正确。
  • 通过使用 openssl,我能够验证签名的格式是否正确并包含有效的 PKCS1.5 填充缓冲区。

我在这里有点困惑,我很高兴听到任何建议/提示/方向。

签名中有(至少)两个错误:

  • 文档 hash 不匹配:

    有符号字节范围的 SHA256 hash 是

    69CF153087670FC5D450FF23675C207BB9659A235A465202F5802ABED7BA7C21

    但你的签名容器声称它是

    93D5804C1A9A31B17F041DE79FB1CD598E1FCC7CDC2A37885CD0502D4FCBB5A6

    这解释了为什么验证器会假设文档已被更改。

  • 签名属性的 hash 不匹配:

    CMS 签名容器中SignerInfo的签名属性的 SHA256 hash 是

    C84C6600F5E11291AAD8240239B7DC09FC00BD6A9056B6BBF584E8D46C8CEBE5

    但是 SHA256withRSA 签名值中的 hash 值是

    93D5804C1A9A31B17F041DE79FB1CD598E1FCC7CDC2A37885CD0502D4FCBB5A6

    即使文档 hash(见上文)匹配,这也会导致验证失败。

    顺便说一句,签名值中的这个 hash 与您声明的(不正确的)文档 hash 值相同。

后一种不匹配可能是由于您签署了错误的数据造成的。

前一种不匹配可能是由于您的代码在计算带符号字节范围的 hash 时出现了一些错误,也可能是由于实际操作了带符号的数据。

要进一步分析问题,需要您的签名代码。

PS:您的证书中也至少有一个错误,它的序列号为负数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM