PDFBOX设置MDPPermission为1后添加LTV信息致认证失效问题咨询
问题产生原因
- MDP权限配置冲突:你设置的MDP权限等级为1,根据PDF规范该等级明确禁止签名后对文档进行任何修改,而添加LTV验证信息需要向PDF中新增DSS字典、OCSP响应、CRL证书等内容,属于文档变更操作,会直接触发MDP签名校验失败,被判定为签名失效。
- 代码逻辑错误:你在调用
addOcspInformation.validateSignature(inFile, outFile)方法完成LTV信息添加后,又执行了Files.write(path,byteArrayOutputStream.toByteArray()),这行代码会把已经生成的带LTV信息的文件直接用未添加LTV的原始签名文件内容覆盖,也会导致后续校验异常。
解决方案
- 首先删除冗余的文件覆盖代码,移除
Files.write(path,byteArrayOutputStream.toByteArray())这行逻辑,validateSignature方法已经将添加完LTV信息的文件写入到outFile对应的路径,不需要重复写入。 - 调整MDP权限配置:如果业务允许调整权限,将MDP等级从1修改为2或3:
- 等级2:仅允许表单填写、新增签名操作,添加LTV信息的增量更新属于该等级允许的变更范围,不会触发签名失效
- 等级3:在等级2的基础上额外允许添加注释,同样兼容LTV信息添加操作
- 如果业务必须使用MDP等级1(禁止任何修改),则不能采用签名后添加DSS字典的方式实现LTV,需要在签名过程中提前获取OCSP、CRL验证信息,嵌入到CMS签名的已签名属性中,避免签名后修改文档。
- 确认AddValidationInformation类采用增量更新模式写入PDF,官方示例默认使用增量更新,不会破坏原有签名的哈希校验,无需额外修改。
相关说明
该签名失效属于符合ISO 32000 PDF规范的预期校验行为,不存在对应的Adobe漏洞ID。
内容的提问来源于stack exchange,提问作者Vas K
相关产品推荐
相关产品推荐

