iText C#MakeSignature.SignReference异常

iText C#MakeSignature.SignReference异常,c#,itext,C#,Itext,我们正在使用C#示例C2_01_SignHelloWorld成功签署PDF文档: 对于我们签署的几乎每一份PDF,这都很好。但是,只要存在一个或多个附件,MakeSignature.SignDistached就会抛出NullReference异常 有人知道为什么会这样吗 谢谢 以下是我们的代码片段: PdfReader reader = new PdfReader(pdfFileName); PdfSignatureAppearance signatureAppearance; String

我们正在使用C#示例C2_01_SignHelloWorld成功签署PDF文档:

对于我们签署的几乎每一份PDF,这都很好。但是,只要存在一个或多个附件,MakeSignature.SignDistached就会抛出NullReference异常

有人知道为什么会这样吗

谢谢

以下是我们的代码片段:

PdfReader reader = new PdfReader(pdfFileName);
PdfSignatureAppearance signatureAppearance;
String pdfFileNameDest = pdfFileName.Substring(0, pdfFileName.LastIndexOf('.')) + "-signed" + pdfFileName.Substring(pdfFileName.LastIndexOf('.'));

FileStream fileStream = new FileStream(certFileName, FileMode.Open);
FileStream fileStreamDest = new FileStream(pdfFileNameDest, FileMode.Create);
Pkcs12Store store = new Pkcs12Store(fileStream, certPassword.ToCharArray());
String alias = "";
ICollection<X509Certificate> chain = new List<X509Certificate>();

try
{
    // Search private key
    foreach (string al in store.Aliases)
        if (store.IsKeyEntry(al) && store.GetKey(al).Key.IsPrivate)
        {
            alias = al;
            break;
        }

    AsymmetricKeyEntry pk = store.GetKey(alias);
    foreach (X509CertificateEntry c in store.GetCertificateChain(alias))
        chain.Add(c.Certificate);

    RsaPrivateCrtKeyParameters parameters = pk.Key as RsaPrivateCrtKeyParameters;

    PdfStamper stamper = PdfStamper.CreateSignature(reader, fileStreamDest, '\0');

    signatureAppearance = stamper.SignatureAppearance;
    signatureAppearance.Reason = "Because we need to sign it";
    signatureAppearance.Contact = "We";
    signatureAppearance.Location = "Server";

    IExternalSignature pks = new PrivateKeySignature(parameters, DigestAlgorithms.SHA256);

    MakeSignature.SignDetached(signatureAppearance, pks, chain, null, null, null, 0, CryptoStandard.CMS);
    signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 250, 150), 1, null);

    stamper.Close();
}
catch (Exception ex)
{
    MessageBox.Show("Exception: " + ex.ToString());
}
PdfReader reader=新的PdfReader(pdfFileName);
PDF签名外观签名外观;
字符串pdfFileNameDest=pdfFileName.Substring(0,pdfFileName.LastIndexOf('.'))+“-符号“+pdfFileName.Substring(pdfFileName.LastIndexOf('.'));
FileStream FileStream=新文件流(certFileName,FileMode.Open);
FileStream fileStreamDest=新的FileStream(pdfFileNameDest,FileMode.Create);
Pkcs12Store store=新的Pkcs12Store(fileStream,certPassword.ToCharArray());
字符串别名=”;
i收集链=新列表();
尝试
{
//搜索私钥
foreach(存储中的字符串al.alias)
if(store.IsKeyEntry(al)和&store.GetKey(al.Key.IsPrivate)
{
别名=al;
打破
}
AsymmetricKeyEntry pk=store.GetKey(别名);
foreach(X509CertificateEntry c in store.GetCertificateChain(别名))
添加(c.证书);
RsaPrivateCrtKeyParameters=pk.Key作为RsaPrivateCrtKeyParameters;
PdfStamper stamper=PdfStamper.CreateSignature(读取器,fileStreamDest,“\0”);
SignaturePearance=母版。SignaturePearance;
signaturepearance.Reason=“因为我们需要签名”;
SignaturePearance.Contact=“我们”;
SignaturePearance.Location=“服务器”;
IExternalSignature pks=新的PrivateKeySignature(参数,DigestAlgorithms.SHA256);
MakeSignature.SignDistached(SignaturePearance,pks,chain,null,null,null,0,CryptoStandard.CMS);
SignaturePearance.SetVisibleSignature(新的iTextSharp.text.Rectangle(100100250150),1,null);
压模关闭();
}
捕获(例外情况除外)
{
Show(“异常:+ex.ToString());
}

上面哪一行/对象为空?您使用哪一个iTextSharp版本?谢谢-我们使用5.5.0版本。我们传递给SignDetached-signaturePearance、pks、chain的参数不为null。该异常发生在pdfstampimpl.cs第235行。PdfDictionary.cs(第369行)中的函数GetAsString返回null。但是PdfObject orig不是空的!我们解决了这个问题——这是我的问题。不能将任何数组写入元数据字典中。PdfDictionary中不再出现崩溃:-)