iText7 SignatureValidator遇/JBIG2Decode过滤器报错,疑惑验签为何需解析该图片
PDF签名验证时遭遇JBIG2Decode过滤器不支持问题
我编写了一段用于验证PDF文档签名的简单代码:
var stream = new FileStream("signed_with_jbig2decode.pdf", FileMode.Open); var ltvDocument = new PdfDocument(new PdfReader(stream)); var signatureUtil = new SignatureUtil(ltvDocument); var validator = new ValidatorChainBuilder() //.WithTrustedCertificates(_rootCAs) .WithAdESReportAggregator(new DefaultAdESReportAggregator()) .BuildSignatureValidator(ltvDocument); var validationReport = validator.ValidateSignatures(); var failures = validationReport.GetFailures(); foreach (var f in failures) { Console.WriteLine($"{f.GetMessage()} : {f.GetExceptionCause()?.Message}"); }
运行这段代码处理目标PDF时,得到如下错误输出:
IOException occurred during document revisions reading. : Filter /JBIG2Decode is not supported. IOException occurred during document revisions reading. : Filter /JBIG2Decode is not supported. ...
(注:另有部分错误可通过取消注释.WithTrustedCertificates(...)行解决)
我了解iText7无法解析使用/JBIG2Decode过滤器的图片,但不明白为何PDF验签需要进行此操作?
PDF签名验证的核心是确认签名的完整性与真实性,这需要检查签名覆盖的文档内容是否被篡改。iText7在验证签名时,会尝试解析文档的各个修订版本——因为PDF签名通常以追加修订的形式添加到文档末尾,验证过程需要对比不同修订的内容差异,确认签名对应的修订未被篡改。
当文档中存在使用/JBIG2Decode过滤器的图片时,iText7在读取文档修订内容的过程中,会默认尝试解析这些图片流。虽然签名验证本身不需要解析图片内容,但iText7的底层文档读取逻辑会处理所有流对象的解码,以此确保能完整获取文档的原始字节信息,用于签名的哈希比对。如果遇到不支持的过滤器,就会抛出IO异常,中断修订读取流程。
简言之,这是iText7内部文档处理逻辑导致的:为了保证签名覆盖内容的完整性校验准确,它需要完整读取并解码文档中的所有流,哪怕这些流和签名逻辑没有直接关联。
内容的提问来源于stack exchange,提问作者craffael
相关产品推荐
相关产品推荐

