我正在尝试 按照此指南使用 Google Clouds KMS 签署 pdf。当使用
pdfsig
进行测试时,我得到:
- Total document signed
- Signature Validation: Digest Mismatch.
Adobe Acrobat 说:
Signature is invalid:
Source of Trust obtained from Adobe Approved Trust List (AATL).
Document has been altered or corrupted since it was signed
Signer's identity is valid
The signature includes an embedded timestamp.
> Signature Details
Last Checked: 2024.12.18 11:42:15 +02'00'
Field: Signature1 (invisible signature)
分析您的示例 PDF,我发现 2 个问题:
您创建的签名容器封装了要签名的数据。这是错误的(就 PDF 签名规范而言)并且没有任何意义:毕竟 CMS 容器是嵌入到 PDF 中的,那么为什么这个嵌入的签名容器又应该具有 PDF 数据的嵌入副本呢?嵌入到?
因此,更换
CMSSignedData signedData = gen.generate(msg, true);
由
CMSSignedData signedData = gen.generate(msg, false);
在
CreateSignatureBase.sign
。
当我尝试使用签名者证书的公钥解密裸签名字节时,结果既不以 0xBC 字节结尾,也不构成填充的
DigestInfo
对象。因此,它既不是完整的 RSASSA-PSS 签名,也不是旧式 RSASSA-PKCS1-v1_5 签名。
类似的情况通常表明所谓的签名者证书中的公钥与用于签名的私钥不匹配。
因此,请检查您用于签名的密钥。