Sign PDF with iTextSharp 5.3.3 and USB token

后端 未结 3 1365
轮回少年
轮回少年 2020-12-01 08:41

I\'m new to iTextSharp (and StackOverFlow). I\'m trying to sign a PDF in C# using external USB token. I try using the follow code I\'ve digged from the internet.

<         


        
3条回答
  •  爱一瞬间的悲伤
    2020-12-01 09:23

    This approach works fine for us (iTextSharp 5.3.3). We use smart-card and USB-token (vendor - www.author.kiev.ua):

                X509Store store = new X509Store(StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly);
                X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(store.Certificates, null, null, X509SelectionFlag.SingleSelection);
    
                X509Certificate2 cert = sel[0];
    
                Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser();
                Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] {
                cp.ReadCertificate(cert.RawData)};
    
                IExternalSignature externalSignature = new X509Certificate2Signature(cert, "SHA-1");
    
                PdfReader pdfReader = new PdfReader(pathToBasePdf);
    
                signedPdf = new FileStream(pathToBasePdf, FileMode.Create);
    
                pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0');
                PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;
    
                signatureAppearance.SignatureGraphic = Image.GetInstance(pathToSignatureImage);
                signatureAppearance.SetVisibleSignature(new Rectangle(100, 100, 250, 150), pdfReader.NumberOfPages, "Signature");
                signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;
    
                MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
    

提交回复
热议问题