Wie melde ich ein PDF-Dokument mit einem Zertifikat vom Windows-Zertifikatsspeicher?

Ich muss signieren Sie ein PDF-Dokument mit einem Zertifikat, das vorhanden ist in den Windows-Zertifikatspeicher. Ich habe Graben rund um den ganzen Tag zu versuchen, es herauszufinden, und ich bin so nah noch so weit Weg.

Alles, was fehlt, ist dies: Wie bekomme ich ein IExternalSignature Objekt zum signieren der PDF-Datei?

Rahul Singla geschrieben hat, ein schönes Beispiel dafür, wie Sie sich ein PDF-Dokument mit dem neuen iText 5.3.0-API - solange können Sie den Zugriff ein .pfx-Datei, sitzen um auf dem PC irgendwo.

Es ist eine Vorherige Frage auf den Abschluss mit einem Zertifikat vom Windows-Zertifikatsspeicher, außer es wurde eine version der API, wo SetCrypto noch vorhanden ist, und die Unterschrift war anscheinend optional. In iText 5.3.0, die API hat sich geändert, und das SetCrypto ist nicht mehr eine Sache.

Hier ist, was ich habe, so weit (Kommentare für die Nachwelt, da diese vielleicht die vollständigste und aktuellste version, wie dies zu tun auf dem Netz):

using iTextSharp.text.pdf;
using iTextSharp.text.pdf.security;
using BcX509 = Org.BouncyCastle.X509;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.Crypto;
using DotNetUtils = Org.BouncyCastle.Security.DotNetUtilities;

...

//Set up the PDF IO
PdfReader reader = new PdfReader(@"some\dir\SomeTemplate.pdf");
PdfStamper stamper = PdfStamper.CreateSignature(reader,
    new FileStream(@"some\dir\SignedPdf.pdf", FileMode.Create), '\0');
PdfSignatureAppearance sap = stamper.SignatureAppearance;

sap.Reason = "For no apparent raisin";
sap.Location = "...";

//Acquire certificate chain
var certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadOnly);

X509CertificateCollection certCollection =
    certStore.Certificates.Find(X509FindType.FindBySubjectName,
    "My.Cert.Subject", true);
X509Certificate cert = certCollection[0];
//iTextSharp needs this cert as a BouncyCastle X509 object; this converts it.
BcX509.X509Certificate bcCert = DotNetUtils.FromX509Certificate(cert);
var chain = new List<BcX509.X509Certificate> { bcCert };
certStore.Close();

//Ok, that's the certificate chain done. Now how do I get the PKS?
IExternalSignature signature = null; /* ??? */

//Sign the PDF file and finish up.
MakeSignature.SignDetached(sap, signature, chain, //the important stuff
    null, null, null, 0, CryptoStandard.CMS);
stamper.Close();

Wie Sie sehen können: ich habe alles, aber die Signatur, und ich bin ratlos, wie soll ich es erhalten!

Sehr nützlich sind. Danke!!!

InformationsquelleAutor doppelgreener | 2013-02-21

Schreibe einen Kommentar