我使用 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 中验证数字签名。