You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PDFBox与GCP KMS签名PDF时出现Digest Mismatch问题求助

PDF数字签名摘要不匹配问题排查

问题背景

按照Google开发者指南使用Google Cloud KMS对PDF进行数字签名后,验证出现异常:

  • 使用pdfsig工具验证结果:
    - Total document signed
    - Signature Validation: Digest Mismatch.
    
  • Adobe Acrobat提示(已翻译):
    签名无效:
    信任来源取自Adobe批准的信任列表(AATL)。
        文档自签名后已被更改或损坏
        签名者身份有效
        签名包含嵌入式时间戳。
    > 签名详情
        最后检查时间: 2024.12.18 11:42:15 +02'00'
        域: Signature1(不可见签名)
    

完整签名代码及已签名PDF已提供,需定位问题原因。

核心排查方向及解决方案

1. 签名字节范围计算错误

PDF签名依赖ByteRange字段精确界定签名覆盖的文档区域,若该范围包含了签名占位符或遗漏部分内容,会直接导致摘要不匹配:

  • 检查代码中生成临时PDF时是否正确预留签名占位符,且计算哈希时仅对ByteRange指定的原始文档字节进行哈希。
  • 验证最终PDF的ByteRange值是否与签名前的计算一致,确保签名值写入的区域未被包含在哈希计算范围内。

2. 哈希算法与签名格式不匹配

Google Cloud KMS的签名算法必须和PDF签名流程中的哈希算法完全对齐:

  • 确认生成PDF待签名摘要时使用的哈希算法(如SHA-256),与向KMS发起签名请求时指定的算法完全一致。
  • 检查KMS返回的签名是否为ASN.1 DER格式,PDF签名要求直接嵌入DER格式的签名值,若为PEM格式需先解码转换。

3. 签名后文档被意外修改

签名完成后任何对PDF的额外操作都会破坏签名完整性:

  • 排查代码在写入签名值后是否存在自动压缩、元数据添加等操作,确保签名完成后文档字节不再被修改。
  • 对比签名前的临时PDF与最终PDF,除签名占位区域外其余字节需完全一致。

4. 时间戳嵌入流程违规

嵌入式时间戳若错误修改了签名覆盖区域,也会引发摘要不匹配:

  • 确认时间戳是嵌入在签名的属性字段中,而非直接修改PDF的其他部分,确保时间戳操作不影响ByteRange界定的哈希计算范围。

内容的提问来源于stack exchange,提问作者Mbrevda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:50:06