"At least one signature is invalid"

"At least one signature is invalid"

我正在尝试使用 itextsharp 对 pdf 进行数字签名而不生成物理文件。我正在将我的 rdlc 数据转换为字节并尝试对其进行数字签名。当我创建物理文件并对该文件进行签名时,它已正确签名,但是当我尝试登录内存流而不在任何地方生成物理文件时,我收到此错误。

At least one signature is invalid

我认为问题出在这一行

var ms  = new MemoryStream(10 * 1024)

public static byte[] SignPdfFileMemory(byte[] bytes)
    {
        
        Stream stream = File.OpenRead(HttpContext.Current.Server.MapPath("SantoshKumar - Copy.pfx"));
        Pkcs12Store pk12 = new Pkcs12Store(stream, "1234".ToCharArray());
        stream.Dispose();
        string alias = null;
        foreach (string tAlias in pk12.Aliases)
        {
            if (pk12.IsKeyEntry(tAlias))
            {
                alias = tAlias;
                break;
            }
        }
        var pk = pk12.GetKey(alias).Key;
        iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(bytes);
        using (var ms  = new MemoryStream(10 * 1024))
        {
            using (iTextSharp.text.pdf.PdfStamper stamper = iTextSharp.text.pdf.PdfStamper.CreateSignature(reader, ms, '[=12=]'))
            {
                iTextSharp.text.pdf.PdfSignatureAppearance appearance = stamper.SignatureAppearance;                    
                appearance.Reason = "MUMBAI";
                appearance.Location = "TEST";
                appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(20, 10, 170, 60),2 , "Icsi-Vendor");
                iTextSharp.text.pdf.security.IExternalSignature es = new iTextSharp.text.pdf.security.PrivateKeySignature(pk, "SHA-256");
                iTextSharp.text.pdf.security.MakeSignature.SignDetached(appearance, es, new Org.BouncyCastle.X509.X509Certificate[] { pk12.GetCertificate(alias).Certificate }, null, null, null, 0, iTextSharp.text.pdf.security.CryptoStandard.CMS);
                stamper.Close();
            }
            return ms.ToArray();
        }
       
        }

File

分析示例 PDF,发现问题的原因是 OP 签名的 PDF 被加密,嵌入的签名容器也被加密。

虽然 ISO 32000-1 在这方面有点令人困惑,但 ISO 32000-2 明确表示嵌入式签名容器不得加密。 (您可以在 中阅读关于验证加密 PDF 签名的相关问题的更多详细信息。)

在这方面发表评论后,OP 确认:

After removing PdfEncryptor code now i am not getting any error.