--- title: 验证签名 description: 验证 PDF 文件中的数字签名。检查证书有效性、签名者身份、文档完整性和信任链状态。 --- # 验证签名 上传已签名的 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 工作流会添加增量更新(例如第二个签名),从而产生部分覆盖。 - 将贵组织的根证书或中间证书作为受信任的证书上传,即可获得信任链验证。 ## 相关工具 - [PDF 数字签名](./digital-sign-pdf):使用您自己的证书签署 PDF - [扁平化 PDF](./flatten-pdf):签名前先扁平化 PDF,以防止签名后的修改 - [移除元数据](./remove-metadata):在应用签名之前清理 PDF