Linux 中添加的 PDF 签名在 Windows 中被视为无效,但证书链却在那里

Linux 中添加的 PDF 签名在 Windows 中被视为无效,但证书链却在那里

我使用 JsignPDF 和我的 Globalsign 证书在 Linux 中签署了一个 PDF 文档;一切看起来都正常,请参阅:

# pdfsig test_signed.pdf
Digital Signature Info of: test_signed.pdf
Signature #1:
  - Signer Certificate Common Name: [email protected]
  - Signer full Distinguished Name: [email protected],[email protected]
  - Signing Time: Oct 04 2023 19:10:32
  - Signing Hash Algorithm: SHA1
  - Signature Type: adbe.pkcs7.detached
  - Signed Ranges: [0 - 160], [30162 - 38375]
  - Total document signed
  - Signature Validation: Signature is Valid.
  - Certificate Validation: Certificate is Trusted.

("[email protected]" is masking my real address)

我将其移至我的 Windows 10 机器上,并在 Acrobat Reader 中打开它,它告诉我“文档认证的有效性未知。无法验证作者”。在 Reader 中打开签名面板告诉我“签名有效性未知”。

我点击了签名面板中的“证书详细信息”,打开了证书查看器。证书链中有三个条目:底部是我的签名,显示由颁发GlobalSign GCC R3 PersonalSign 1 CA 2020。接下来是 PersonalSign 证书(当然),显示由“GlobalSign Root CA - R3”颁发,树的顶部是GlobalSign Root CA - R3。在所有情况下,“所选证书路径有效”。这一切都符合预期。

在 Windows 证书存储中我确实看到了“GlobalSign Root CA - R3”。

因此 AcrobatReader 告诉我,使用证书链包含 Windows 存储内的有效证书的证书进行的签名无效。关于如何调试此问题,您有什么想法吗?

答案1

确切的消息表示有效性未知,而不是签名无效。这是技术上正确,因为您使用的签名算法(SHA-1)已知是损坏的,这意味着无论证书链的明显有效性如何,使用该算法的任何签名都不可信任。

具体细节如何SHA-1 被破坏了在这里有点题外,但简短的解释是,已经证明可以使用它合成产生哈希碰撞(事实上,最初的演示是使用 PDF 文档完成的),这意味着无法确定文档是否与签名时相同(这反过来意味着使用它的签名不可信)。

尝试使用未知缺陷的较新算法(例如 SHA-256)对文档进行签名,您可能会看到正确列出的签名有效。

答案2

为了签署 PDF 文档,Globalsign 提供了单独的“文档签名证书”,该证书包含在硬件令牌中。而且,每年的费用为 328 英镑,比我拥有的“PersonalSign”证书贵得多……

答案3

Globalsign 未列入 Adobe 批准的信任列表成员,这可能是为什么 Reader 不接受其证书链的原因。

要添加要信任的证书,以下步骤可能适合您:

  • 在 Reader 中打开文档
  • 右键单击签名并选择“显示签名属性...”
  • 单击“显示签名者的证书”(如果所有其他按钮都呈灰色,则可能需要单击“验证签名”)
  • 在证书查看器窗口中,转到信任选项卡
  • 点击“添加到受信任的证书”
  • 单击“确定”以查看警告
  • 选中“导入联系人设置”窗口中的所有复选框,然后单击“确定”
  • 返回“签名属性”窗口,单击“验证签名”
  • 如果该过程成功,现在将验证签名。

您可以在文章中找到有关此过程的详细描述,其中包含屏幕截图,以帮助您完成此过程(尽管可能与您的存在一些细微的差异) 在 Acrobat Reader 中验证数字签名

相关内容