当前位置: 首页 > 知识库问答 >
问题:

签名的PDF有多可靠。(c#,Itextsharp)

云和硕
2023-03-14

我用从GlobalSign收到的通用串行总线令牌签署了一个PDF文件。但是我看不到Adobe的任何图标表明证书是有效的。

我从GlobalSign收到的USB令牌是一个可信任(安全/信任)证书。但我不确定为什么看不到可信/安全证书图标。

签名PDF如下所示:

我还可以从Adobe Acrobat DC看到这个图标的签名:

            ICollection<ICrlClient> crlList = new List<ICrlClient> { new               CrlClientOnline(chain) };
            ICrlClient crl = new CrlClientOnline(chain);
            IOcspClient ocsp;

            ocsp = new OcspClientBouncyCastle();
            //var sdf0= ocsp.GetEncoded(chain[0] , chain[1], "http://ocsp2.globalsign.com/gsalphag2");
            PdfReader r = new PdfReader(hedefPDFpath + "Emre.pdf");
            FileStream fos = new FileStream(hedefPDFpath + "Emre" + fi.Name, FileMode.Create);
            PdfStamper stp = PdfStamper.CreateSignature(r, fos, '\0', null, true);
            LtvVerification v = stp.LtvVerification;
            AcroFields fields = stp.AcroFields;
            List<String> names = fields.GetSignatureNames();
            String sigName = names[names.Count - 1];
            PdfPKCS7 pkcs7 = fields.VerifySignature(sigName);
            if (pkcs7.IsTsp)
                v.AddVerification(sigName, ocsp, crl, LtvVerification.CertificateOption.SIGNING_CERTIFICATE, LtvVerification.Level.OCSP_CRL, LtvVerification.CertificateInclusion.YES);
            else foreach (String name in names)
                    v.AddVerification(name, ocsp, crl, LtvVerification.CertificateOption.WHOLE_CHAIN, LtvVerification.Level.OCSP_CRL, LtvVerification.CertificateInclusion.YES);
            PdfSignatureAppearance sap = pdfStamper.SignatureAppearance;

            MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, crlList, ocsp, TsaCliente, estimatedSize, CryptoStandard.CMS);

共有1个答案

何博涛
2023-03-14

执行主任在评论中澄清:

签名PDF的可靠性/可信度如何?蓝色丝带如何放置在pdf globalsign中。com/en/resources/CDS_OCSP_服务。pdf

因此,OP实际上是在努力按照GlobalSign在传单中的要求去做:

在他用GlobalSign设备和iTextSharp签署的文件上找不到确切的挂件。

这里有三个方面需要考虑:

  • 不同类型的PDF签名
  • 不同的Adobe Reader版本
  • 一般信任签名

根据PDF规范ISO 32000-1:

PDF文档可能包含以下标准类型的签名:

  • 一个或多个批准签名。[...]
  • 至多一个认证签名(PDF 1.5)。[...]
  • 最多两个使用权限签名(PDF 1.5)。

此处对使用权签名不感兴趣,因为它们本质上只是一种工具,通过它,可以为使用特定软件包生成的PDF激活PDF查看器中的额外功能,例如,为特定Adobe软件生成的PDF激活Adobe Reader中的功能

另一方面,您可能对批准和认证签名都感兴趣。区别:

认证签名

  • 如果一个PDF必须有一个,它必须是其中的第一个签名。
  • 它特别是指文件的作者/来源宣布作者身份,并携带以后允许对文件进行更改的信息。
  • 一些PDF阅读器可能会选择对用于认证的证书的安全性要求高于用于批准的证书。

批准签字

  • 除非PDF中的认证签名禁止,否则其中可能有任意数量的批准签名。
  • 它可以用于不同的目的;作者不需要使用认证签名,他可以使用批准签名,并使用签名“原因”,如“我写了这个文档”;它也可以只意味着有关人员阅读了文档;或者介于两者之间的任何东西。因此,一定要使用签名“原因”来表明你想用你的签名表达什么。

考虑到OP的图片,这张代表了批准签名:

这是一个认证签名:

iTextSharp可以创建这两种类型,参见PDFSignaturePearance。认证级别。

不过,考虑到您的代码,很明显您已经将PDF作为输入进行了签名,现在希望为之前的签名添加验证信息,然后自己签名。因此,您的签名不是文件中的第一个签名,因此不能是认证签名。

就像Adobe Reader的通用UI每隔几个主要版本就会发生变化一样,它用来表示签名验证结果的特定UI元素也会发生变化。

例如,对于您链接的GlobalSign文档,您至少可以在Adobe Reader 9上看到它所宣传的蓝色丝带条和蓝色玫瑰花结:

但在Adobe Reader DC中,它看起来不一样

由于全球标志传单可以追溯到2007年,他们显然不知道奥多比现在将如何展示丝带和玫瑰花结,将近9年后。

GlobalSign当然可以更新他们的文档。特别是,如果他们把OP指向传单,他们会做得很糟糕。

《凤凰社》想知道

签名PDF的可靠性/信任度

与GlobalSign传单上告诉我们的相反,通常不能用“在Adobe Reader中打开文件并查找这个或那个符号”来回答信任哪个签名的问题

你可以信任哪些签名,这在很大程度上取决于法律背景。你通常只想信任数字签名,这些签名(如果事情最终在法庭上得到处理)将被接受为证据。

在很长一段时间内,Adobe默认情况下仅通过一些美国CA颁发的证书进行可信签名。

因此,在很长一段时间里,例如在德国,你知道签名是一个有趣的噱头,但如果你看到奥多比阅读器完全接受它,它就毫无价值。另一方面,如果奥多比阅读器说文档没有被操纵,但阅读器不能信任签名者的身份,那么值得再检查一下,看看签名者证书是否是由合格的认证机构根据德国签名法签发的。

同时,Adobe也接受由CAs在EUTL(欧洲可信证书颁发机构列表)上颁发的证书。因此,现在人们必须看看Adobe显示的信任来源。

因此,要回答您手头案件的问题,您需要知道您的PDF收件人评估签名的法律背景。

 类似资料:
  • 我正在将代码从iText5迁移到iText7,目前我正在努力将一个签名添加到已经包含另一个签名的PDF中。这些签名是用我们的国民身份证(公民卡)进行的。 在iText5中,我使用了PdfStamper,但它在Itext7中丢失了... 这是我目前所掌握的: POReID(https://github.com/POReID/POReID)是用于与智能卡交互的库。 当第一次签署文件时,它工作得很好。再

  • 我对iTextSharp有意见。我有一个带有表单字段的文档,并且我已经为签名生成了字段。当第一个人在文件上签字时,它就会正常工作。Adobe Reader显示有效签名。当我让第二个人在文档上签名时,Adobe Reader显示签名1现在是“未知签名”,签名无效。Adobe reader显示: 此签名中包含的格式或信息有错误(支持信息:SigDict/Contents非法数据)

  • 我找不到为什么Foxit PDF阅读器显示我的签名文件无效。首先,我将空白签名容器插入pdf 我发送到外部Web服务以使用合格的签名进行签名。 接下来,我使用webservice的结果对pdf进行了签名。这是外部签名容器: 这是签名代码: 并且有结果: 找不到我做错了什么。

  • 作为我对客户机/服务器pdf签名研究的一部分,我测试了itext pdf延迟签名示例。不幸的是,我得到的合并空签名pdf和哈希值的pdf ie输出显示无效签名。 下面是我的代码片段 我正在使用pkcss11 usb令牌进行签名

  • 由于akka是一个构建actor模型的工具包,而actor模型是运行在JVM内部的对象,那么创建后的actor对象的可靠性有多高。考虑到让它崩溃的性质,除非像使用毒丸或JVM关闭一样显式地杀死它,否则JVM中actor对象的可靠性有多高,actor不是自己全部杀死的。

  • 我有一个私人钥匙在档案里。“privatekey.pem”并且不知道如何创建谁能帮助我吗?我正在尝试使用IText7签名pdf。