使用 iText 8 验证 PDF 签名

问题描述 投票:0回答:1

一直在使用 iText 使用自签名证书来签署 PDF 文件。

有没有办法将 PDF 作为输入并验证它是否使用我的自签名证书进行签名? (因此验证它是我生成的,没有任何修改)。

由于我们不能信任签名者姓名或其他签名属性,我假设(希望)我们可以根据我们的“秘密”证书验证它,即使它是自签名的。

预先感谢您的帮助。

c# pdf itext
1个回答
0
投票

从 iText 8.0.5 开始,引入了新的 API 用于签名验证。为了使用它,您需要使用

SignatureValidator
创建
ValidatorChainBuilder
实例。事先,您需要使用
ValidatorChainBuilder#withTrustedCertificates
方法提供您认为值得信赖的所有证书,以便验证成功。在这种情况下,您的自签名证书应作为受信任的证书提供。在这种情况下,iText 将执行完整的签名验证,只有在使用您的自签名证书作为锚点生成签名的情况下才能成功,并且您应该能够看到生成的报告。

如果结果是

VALID
,则该 pdf 确实是使用相关证书进行签名的。如果不是,则可能需要进行更详细的调查。由于签名验证过程相当复杂,可能会报告其他不相关的问题,这违反了 ETSI 签名标准。因此,即使文件确实是使用相关证书签名的,结果可能仍然是
INDETERMINATE
甚至
INVALID

但是,至少在某种程度上,可以按照您希望的方式修改验证逻辑。例如,只需创建自定义

RevocationDataValidator
(它基本上不执行任何操作)并在
ValidatorChainBuilder#withRevocationDataValidator
方法中提供此实例,就可以完全禁用与撤销数据验证相关的所有内容。这同样适用于其他验证方面。请参阅
ValidatorChainBuilder
SignatureValidationProperties
了解更多详情。当然,需要小心,不要意外禁用某些东西,否则根本不会执行验证。

© www.soinside.com 2019 - 2024. All rights reserved.