Galera, estou desenvolvendo um sistema com C# e usando a biblioteca itextsharp para assinar um pdf digitalmente com um certificado do tipo A3(SmartCard).
Bom eu consegui proceder com a assinatura, mas na hora que eu abro o pef gerado ele aparece com uma assinatura inválida.
Segue o código:
Alguém poderia me ajudar? Estou precisando muito fazer isso funcionar.
Obrigado
Bom eu consegui proceder com a assinatura, mas na hora que eu abro o pef gerado ele aparece com uma assinatura inválida.
Segue o código:
Código:
X509Certificate2Collection lcerts; X509Store lStore = new X509Store (StoreName.My, StoreLocation.CurrentUser); // Abre o Store lStore.Open(OpenFlags.ReadOnly); // Lista os certificados lcerts = lStore.Certificates; foreach (X509Certificate2 cert in lcerts) { if (cert.HasPrivateKey && cert.NotAfter > DateTime.Now && cert.NotBefore < DateTime.Now) { System.Security.Cryptography.AsymmetricAlgorithm alg = cert.PrivateKey; System.Security.Cryptography.RSACryptoServiceProvider rsa = (System.Security.Cryptography.RSACryptoServiceProvider)alg; org.bouncycastle.x509.X509Certificate bcCert = new org.bouncycastle.x509.X509Certificate(cert.GetRawCertData()); PdfReader reader = new PdfReader(inputBox.Text); reader.Appendable = true; PdfStamper stamper = PdfStamper.CreateSignature(reader, new FileStream(outputBox.Text, FileMode.Create, FileAccess.Write), '\0',null,true); PdfSignatureAppearance sap = stamper.SignatureAppearance; sap.SetCrypto(null, new org.bouncycastle.x509.X509Certificate[] { bcCert }, null, PdfSignatureAppearance.WINCER_SIGNED); //sap.Reason = "Wincert demo"; //sap.Location = "LBC"; //sap.SignDate = DateTime.Now; sap.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 250, 150), 1, null); sap.SetExternalDigest(new byte[128], null, "RSA"); sap.PreClose(); System.Security.Cryptography.SHA1 messageDigest = System.Security.Cryptography.SHA1.Create(); byte[] hash = messageDigest.ComputeHash(sap.RangeStream); PdfSigGenericPKCS sg = sap.SigStandard; PdfLiteral slit = (PdfLiteral)sg.Get(PdfName.CONTENTS); PdfPKCS7 sig = sg.Signer; byte[] signedHash = rsa.SignHash(hash, "SHA1"); sig.SetExternalDigest(signedHash, null, "RSA"); PdfDictionary dic = new PdfDictionary(); dic.Put(PdfName.CONTENTS, new PdfString(sig.GetEncodedPKCS1()).SetHexWriting(true)); sap.Close(dic); debug("Assinado"); } } lStore.Close();
Obrigado
Comment