Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Itext 使用联合签名SAPI对现有签名字段进行签名时签名无效_Itext_Digital Signature_Docusignapi_Cosign Api - Fatal编程技术网

Itext 使用联合签名SAPI对现有签名字段进行签名时签名无效

Itext 使用联合签名SAPI对现有签名字段进行签名时签名无效,itext,digital-signature,docusignapi,cosign-api,Itext,Digital Signature,Docusignapi,Cosign Api,我有一个带有多个签名字段的pdf。我使用iTextSharp创建带有签名字段的pdf,并尝试使用联合签名SAPI对每个签名字段进行签名。当我从调用的响应中附加签名对象时,签名无效 下面是我使用的代码示例,用于从包含多个(签名字段)的pdf文档中对现有签名字段进行签名: 这是我要签名的文件。我试图在签名字段“sig2-9”上签名,但签名无效,并显示消息“本文件已发生更改,导致签名无效”。很抱歉,没有发布已签名的文档,但证书所有者不想共享其个人信息 这是签名无效的已签名文件 这是一个我用另一个

我有一个带有多个签名字段的pdf。我使用iTextSharp创建带有签名字段的pdf,并尝试使用联合签名SAPI对每个签名字段进行签名。当我从调用的响应中附加签名对象时,签名无效

下面是我使用的代码示例,用于从包含多个(签名字段)的pdf文档中对现有签名字段进行签名:

这是我要签名的文件。我试图在签名字段“sig2-9”上签名,但签名无效,并显示消息“本文件已发生更改,导致签名无效”。很抱歉,没有发布已签名的文档,但证书所有者不想共享其个人信息

这是签名无效的已签名文件

这是一个我用另一个CoSign api调用签名的文件。此调用创建签名字段并使用与“已签名文件”相同的证书对其进行签名。如您所见,本例中的签名是有效的。在本例中,我使用了“”签名类型。

Bruno和mkl

我的名字是Aviv Siminovici,我是DocuSign的DSA(DocuSign Signature Appliance)API专家

您的代码似乎很好,但您可能忘记了以下内容:

Req.OptionalInputs.ReturnPDFTailOnlySpecified = true;
Req.OptionalInputs.ReturnPDFTailOnly = true;
为方便起见,下面是一个将签名附加到PDF的函数:

public bool PDFAttachSignature(string PDFFile, byte[] Signature, bool isDisplayErrorsGUI)
{
   if (Signature == null) return false;
   try
   {
      FileStream f = File.OpenWrite(PDFFile);
      f.Position = f.Length;  //seek to the end of file
      f.Write(Signature, 0, Signature.Length); //write the signature content
      f.Close();
   }
   catch (Exception ex)
   {
      if (isDisplayErrorsGUI)
         MessageBox.Show("Error Attaching the signature\n\nException:\n" + ex.Message, "Error");
         return false;
   }

   return true;
}
包含示例的整个VisualStudio项目是


您声明使用PDF查看器打开PDF时签名无效。由于证书链中的不受信任证书以DSA根证书结尾,也可能发生这种情况。或者因为无法对该链上的证书执行吊销。请查看签名无效的原因

我不认识代码(可能是因为它是联合签名代码),但是如果你用iText创建PDF,为什么不用iText对PDF进行签名?@BrunoLowagie“为什么不用iText对PDF进行签名”—我想问题是关于通过DocuSign进行签名。有没有一种简单的方法将DocuSign集成到iText签名中?(实际上我还没有玩过DocuSign,所以我不知道这有多复杂或容易…)DocuSign是iText的客户,所以这两种技术应该可以很好地协同工作,但我不熟悉CoSign API。@BrunoLowagie-我不能使用iTextSharp来签署pdf文件,因为私钥存储在联合签名服务器上。我使用pdf文件在联合签名服务器上进行Soap调用,服务器返回文件的签名哈希。当我完成签名并打开文件时,签名无效。嗯@mkl,假设Kostas是CoSign/Docusign的客户,解决这一问题的最佳方法是联系Docusign的客户支持,并要求他们在iText提交一份支持单。虽然亲自解决这一问题很好,主要收件人应该是问题的原始海报Kostas Patakakis。此外,“请查看签名无效的原因。”-为了了解这一点,我已经在评论中要求OP分享一份说明该问题的示例PDF。感谢回复Aviv,但我对您的解决方案也有同样的问题。我更新了帖子,并附上了想要签名的pdf。@Aviv Kostas的示例文档包含签名锁词典。DSA/Docusign是否正确处理了它们?@Kostas-当我打开已签名的文档时,我收到一个错误,上面写着“证书或证书链中的一个证书的吊销状态未知”。此错误与生成签名的代码无关。实际上,最近prime.cosigntrial.com信任链上的一个中间人证书上的CRL无效。您应该在prime.cosigntrial.com对旧帐户执行的每个签名中看到它。我建议尝试以下方法:1)使用cosignclient进行签名2)删除“仅限尾部”3)使用cosigndemo.arx进行签名。com@AvivSimionovici当我在AdobeAcrobatReaderDC中打开OP时,它显示;问题不在于任何撤销或信任问题,而在于Adobe声称“自应用签名以来,文档已被更改或损坏。”因为Adobe显示了这一点,即使将PDF缩减为实际签署的修订版,这也不是由于增量更新中的任何添加。Adobe确实认为哈希值是错误的。
public bool PDFAttachSignature(string PDFFile, byte[] Signature, bool isDisplayErrorsGUI)
{
   if (Signature == null) return false;
   try
   {
      FileStream f = File.OpenWrite(PDFFile);
      f.Position = f.Length;  //seek to the end of file
      f.Write(Signature, 0, Signature.Length); //write the signature content
      f.Close();
   }
   catch (Exception ex)
   {
      if (isDisplayErrorsGUI)
         MessageBox.Show("Error Attaching the signature\n\nException:\n" + ex.Message, "Error");
         return false;
   }

   return true;
}