PDF 签名验证失败

PDF Signature fails verification

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

几个重要问题:

我在这里有点困惑,很高兴听到任何消息 suggestions/hints/directions。

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

  • 文档哈希不匹配:

    带符号字节范围的 SHA256 哈希为

    69CF153087670FC5D450FF23675C207BB9659A235A465202F5802ABED7BA7C21
    

    但您的签名容器声称它是

    93D5804C1A9A31B17F041DE79FB1CD598E1FCC7CDC2A37885CD0502D4FCBB5A6
    

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

  • 签名属性的散列不匹配:

    您的 CMS 签名容器中 SignerInfo 的已签名属性的 SHA256 哈希值是

    C84C6600F5E11291AAD8240239B7DC09FC00BD6A9056B6BBF584E8D46C8CEBE5
    

    但是你的SHA256withRSA签名值中的hash值是

    93D5804C1A9A31B17F041DE79FB1CD598E1FCC7CDC2A37885CD0502D4FCBB5A6
    

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

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

后面的不匹配可能是你签错数据造成的

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

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

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