跳到正文

验证签名 ​

上传已签名的 PDF,此工具会提取每个数字签名,识别签名者,检查证书有效性,并报告文档在签名后是否被修改。您还可以提供受信任的证书来验证签名链。

工作原理 ​

  1. 上传已签名的 PDF 文件。验证会自动开始。
  2. 工具会显示摘要:找到的签名数量,以及其中有效的数量。
  3. 每个签名都有一张详细卡片,显示签名者姓名、颁发者、日期和状态。
  4. 可选择上传受信任的证书(.pem、.crt、.cer、.der),以针对特定信任锚验证签名。系统会自动重新验证。

检查内容 ​

签名解析 ​

工具会从 PDF 中提取 PKCS#7 签名对象,解码 ASN.1 结构,并取出签名者的 X.509 证书以及签名中嵌入的所有证书链。

证书有效性 ​

  • 有效期:证书当前是否在有效日期范围内?
  • 自签名检测:证书是否是自己的颁发者?
  • 信任链:提供受信任的证书后,签名者的证书是否能链接到该证书?

密码学验证 ​

  • 工具会重建签名 /ByteRange 所覆盖的字节,使用签名者声明的算法对其进行哈希,并将结果与签名内的 messageDigest 属性进行比较。
  • 然后将已签名的属性重新序列化为 DER SET,并使用签名者证书的公钥验证签名。
  • 只有以上全部通过,签名才会被报告为有效。如果 PDF 字节在签名后被修改,或嵌入的签名与签名者的密钥不匹配,状态会显示“无效,密码学验证失败”并给出具体原因。

支持的签名算法 ​

算法验证路径
RSA (PKCS#1 v1.5)node-forge publicKey.verify,并以 Web Crypto 作为后备
RSA-PSS (RSASSA-PSS)Web Crypto verify({name: 'RSA-PSS', saltLength})
ECDSA P-256/P-384/P-521在 DER → IEEE P1363 签名转换后使用 Web Crypto verify({name: 'ECDSA', hash})

如果签名使用的算法不在此列表中(例如 Ed25519、SM2,或使用不常见摘要 OID 的 RSA),卡片会以黄色显示“未验证,不支持的签名算法”,并附上具体的 OID 或原因。这是有意设计的三态区分:

  • 有效:签名已通过签名者公钥的密码学验证。
  • 无效:验证已运行并得出否定结果(字节被更改、密钥不匹配)。
  • 未验证:工具无法对该算法运行验证。证书元数据仍会显示,但您应将该签名视为“未知”,并使用 Adobe Acrobat 或 openssl cms -verify 进行验证。

不安全的摘要算法 ​

  • 使用 MD5 或 SHA-1 的签名会被判定为无效,并标记为“不安全的摘要”状态。这两种算法都已有公开的碰撞攻击,因此基于 SHA-1 或 MD5 哈希的签名无法保证完整性。
  • SHA-224、SHA-256、SHA-384 和 SHA-512 均被接受。

文档覆盖范围 ​

  • 完全覆盖:签名覆盖整个 PDF 文件,意味着签名后没有任何字节被添加或更改。
  • 部分覆盖:签名只覆盖文件的一部分。这可能表示签名后有过修改(不一定是恶意的,增量保存也会产生部分覆盖)。

签名详情 ​

每张签名卡片显示:

  • 签名者:签名者证书中的通用名称、组织和电子邮件
  • 颁发者:为签名者证书签发的证书颁发机构
  • 签名时间:签名中嵌入的时间戳
  • 有效期起 / 有效期至:证书的有效期
  • 原因:签署文档的原因(如有提供)
  • 地点:签署地点(如有提供)
  • 覆盖状态:完全或部分
  • 信任徽章:受信任或不在信任链中(仅在提供自定义证书时显示)

技术详情 ​

展开技术详情部分可查看:

  • 签名者证书的序列号
  • 摘要算法(SHA-256、SHA-512 等)
  • 签名算法(RSA with SHA-256、ECDSA with SHA-256 等)
  • 无效签名的错误信息

使用场景 ​

  • 在会签之前验证已数字签名的合同
  • 审计已签名的文档,确认其未被篡改
  • 检查证书在文档签署之后是否已过期
  • 使用贵组织的根证书验证签名
  • 检查政府或法律文件的签名详情

提示 ​

  • 自签名证书并不意味着签名无效,只是说明无法通过受信任的第三方验证签名者的身份。这在内部文档中很常见。
  • 部分覆盖并不总是意味着被篡改。许多 PDF 工作流会添加增量更新(例如第二个签名),从而产生部分覆盖。
  • 将贵组织的根证书或中间证书作为受信任的证书上传,即可获得信任链验证。

相关工具 ​

采用 AGPL-3.0 与商业许可双重授权。