为了账号安全,请及时绑定邮箱和手机立即绑定

如何验证 pdf 文件是否包含有效的数字签名?

如何验证 pdf 文件是否包含有效的数字签名?

C#
小怪兽爱吃肉 2022-11-13 15:46:50
我有一个经过数字签名的 pdf,我想检查是否:1)pdf包含签名2)如果签名有效我已经使用 iTextSharp 库尝试了一些代码,但没有成功。放置我尝试过的解决方案之一,但没有成功。特别是当我检查 names.Count 时,它成功并立即返回 false。我附上一个屏幕来阅读 AcroFields,我不知道它是否有助于理解问题。我无法摆脱它。public static bool ValidateFileSignatures(byte[] file){    PdfReader reader = new PdfReader(file);    AcroFields af = reader.AcroFields;    var names = af.GetSignatureNames();    if (names.Count == 0)        return false; // no signatures    foreach (string name in names)    {        if (!af.SignatureCoversWholeDocument(name))        {            return false;        }        PdfPKCS7 pk = af.VerifySignature(name);        if (!pk.Verify())        {            return false;        }    }    return true;}示例 PDF 可在此处找到我还找到了另一个使用 Pknet 库的解决方案,但我找不到 NuGet 包。欢迎任何解决方案或建议。谢谢
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

在问题的标题中,您要求提供一种方法来验证 pdf 文件是否包含有效的数字签名

但是,您提供的示例文件不是包含数字签名的pdf 文件;相反,它是一个包含 PDF 作为其嵌入式签名数据的签名容器

因此,iText 告诉您(通过af.GetSignatureNames().Count == 0)PDF 不包含任何签名也就不足为奇了,因为它确实不包含。

要检查您是否有这样签名的 PDF,您不需要像 iText 这样的 PDF 库,而是需要不同类型的库/API,一个可以检查内容并验证 CMS 签名容器的签名的库,例如 BouncyCastle 用于用于欧盟合格签名验证的第一个简单验证或电子签名 DSS。


有关嵌入签名的 PDF 的背景,请参阅此答案


考虑到您的示例签名,您可能对根据欧洲合格签名法规进行验证感兴趣。

一种公开可用的验证器实现是CEF 数字签名服务。有一个用于验证使用此软件的演示 Web 应用程序。

DSS 是用 Java 编写的,但您可以将其作为通过 REST 与之通信的服务运行。这也应该允许与 .Net 代码轻松集成。

如果这对您来说是一个选项,只需使用演示 Web 应用程序来验证您的测试用例并检查结果是否符合您的期望。例如,您的示例文件被验证为 TOTAL_PASSED。(在我看来,使用 SHA1withRSA/2048 对签名者证书的 OCSP 响应进行签名有点关键。)

如果这不是您的选择,您仍然可以在github上查看该项目,以了解完整的签名和签名验证服务。

如果所需的验证配置文件不同,请澄清。


查看完整回答
反对 回复 2022-11-13
  • 1 回答
  • 0 关注
  • 230 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信