调用ExternalSigningSupport.sign后PDF签名无效问题排查
PDFBox 3.0外部签名后签名无效的关键遗漏步骤
- 校验哈希算法一致性
生成PKCS#7时使用的哈希算法(如SHA-256)必须和PDFBox签名配置的DigestAlgorithm完全匹配。比如初始化PdfSigner时指定的算法要和签名服务生成PKCS#7的算法一致,否则Acrobat会因哈希不匹配判定签名无效。 - 正确转换PKCS#7编码
提前准备的PKCS#7十六进制字符串,必须先转成二进制字节数组再传入ExternalSigningSupport.sign,不能直接用字符串转UTF-8或其他编码的字节,编码错误会直接损坏签名数据。 - 确保待签名字节完整
调用ExternalSigningSupport.getContent获取的待签名字节流,必须完整用于生成PKCS#7的签名哈希。如果生成PKCS#7时用的不是这部分原始字节的哈希,签名无法匹配文档内容,导致验证失败。 - 配置正确的签名字典属性
签名时必须正确设置签名字典的核心属性:/Filter设为Adobe.PPKLite,/SubFilter设为adbe.pkcs7.detached(分离式签名场景)。属性不匹配会让Acrobat无法正确解析签名逻辑。 - 禁止签名后修改文档
签名完成输出PDF后,不能对文件做任何后续修改(包括添加注释、调整元数据等),哪怕微小改动都会被Acrobat检测到,标记文档已修改。 - 验证PKCS#7本身的完整性
检查PKCS#7十六进制字符串是否完整无截断,可将其转成字节数组后用OpenSSL工具验证结构是否合法,确认包含完整的证书链和有效签名值。
内容的提问来源于stack exchange,提问作者June Young Oh
相关产品推荐
相关产品推荐

