签名PDF的可靠性如何。 (c#,Itextsharp)

时间:2016-04-26 09:26:06

标签: c# pdf itextsharp adobe

我使用从GlobalSign收到的USB令牌签署PDF文件。但是我看不到Adobe的任何图标表明证书有效。

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

签名PDF如下所示:

enter image description here

我还可以看到Adobe Acrobat DC签署此图标:

enter image description here

            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 个答案:

答案 0 :(得分:0)

OP在评论中澄清:

  

签名PDF的可靠性/可靠性如何?如何在pdf中放置蓝丝带globalsign.com/en/resources/CDS_OCSP_Services.pdf

GlobalSign DocumentSign flyer

因此,OP本质上是试图做,因为GlobalSign要求他在那个传单中:

"look for the Blue Security Bar and Blue Rosette"

并没有找到他用GlobalSign设备和iTextSharp签署的文件的确切链接。

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

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

PDF签名的类型

根据PDF规范ISO 32000-1

  

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

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

这里使用权利签名并不重要,因为它们基本上只是一种工具,通过该工具,可以为使用特定软件包生成的PDF激活PDF查看器中的额外功能,例如,为某些Adobe软件生成的PDF激活的Adobe Reader中的功能。

另一方面,批准和认证签名都可能是您感兴趣的。差异:

认证签名

  • 如果PDF有一个,则必须是其中的第一个签名。
  • 特别是文件的作者/来源宣布作者身份,并载有后来changes to the document应被允许的信息。
  • 某些PDF查看者可能会选择对用于认证的证书具有比批准更高的安全要求。

批准签名

  • 除非PDF中的认证签名禁止,否则其中可能包含任意数量的批准签名。
  • 它可以用于不同的目的;作者不需要使用认证签名,他也可以使用批准签名并使用签名&#34; Reason&#34;喜欢&#34;我撰写了这份文件&#34 ;;它也只能意味着有关人员阅读该文件;或介于两者之间。因此,请务必使用签名&#34; Reason&#34;用你的签名表明你想要表达的内容。

考虑到OP的图像,这个代表了一个批准签名:

这是一个认证签名:

iTextSharp可以创建两种类型,参见PdfSignatureAppearance.CertificationLevel

考虑到您的代码,很明显您已经将PDF作为输入进行了签名,现在想要为这些先前的签名添加验证信息,然后自己签名。因此,您的签名不是文档中的第一个,因此不能是证书签名。

验证结果显示在Adobe Reader

就像Adobe Reader的常规UI更改每个主要版本一样,它用于表示签名验证结果的特定UI元素也是如此。

E.g。对于您链接的GlobalSign文档,您至少可以看到Adobe Reader 9蓝色功能区栏和它所宣传的蓝色花环:

ribbon and rosette in Adobe Reader 9.5

但在Adobe Reader DC中它看起来不同

ribbon and rosette in Adobe Reader DC

由于GlobalSign的传单可以追溯到2007年,他们显然不知道Adobe将近9年后如何展示色带和玫瑰花。

GlobalSign当然可以更新他们的文档。特别是,如果他们将OP指向传单,他们就做了糟糕的工作。

信任数字签名

OP想知道

  

签名PDF的可靠/可靠性

与GlobalSign传单告诉我们的内容相反,通常可以通过说&#34;在Adobe Reader中打开文件并查找此符号来解答信任哪个签名的问题。&#34;

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

Adob​​e默认情况下很长一段时间只能通过某些美国CA颁发的证书来信任签名。

因此,很长一段时间,例如在德国,你知道签名是一个有趣的噱头但是如果你看到Adobe Reader完全接受它就毫无价值。另一方面,如果Adobe Reader说文档没有被操作但是读者不能信任签名者的身份,那么根据德国签名法,有必要再检查签名者证书是否由合格的CA签发了问题。

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

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