【发布时间】:2020-11-05 05:31:03
【问题描述】:
我正在尝试使用 itextsharp 对 pdf 进行数字签名,而不生成物理文件。我正在将我的 rdlc 数据转换为字节并尝试对其进行数字签名。当我创建物理文件并签署该文件时,它已正确签署,但是当我尝试登录内存流而不在任何地方生成物理文件时,我会收到此错误。
至少一个签名无效
我认为问题在于这条线
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, '\0'))
{
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();
}
}
【问题讨论】:
-
请分享一个由您的代码签名的示例 pdf 以供分析。
-
@mkl 截图附在“错误”上方
-
@Aalok mkl 要求提供示例 PDF,而不是错误屏幕截图。
-
截图不是pdf示例。通常在创建 pdf 签名时出现问题,分析签名的 pdf 本身很快就会清楚在哪里寻找错误。
-
好的。今天晚些时候我会在办公室查看文件。