使用 pdfbox 和 GCP KMS 签名时摘要不匹配

问题描述 投票:0回答:1

我正在尝试 按照此指南使用 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)

但我不太确定我做错了什么?完整代码可在此处获取,并在第 1 期中提供签名的 pdf。

pdf pdfbox google-cloud-kms
1个回答
0
投票

分析您的示例 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 签名。

类似的情况通常表明所谓的签名者证书中的公钥与用于签名的私钥不匹配。

因此,请检查您用于签名的密钥。

© www.soinside.com 2019 - 2024. All rights reserved.