2017-04-22 1 views

Répondre

1

Voici le code pour obtenir le certificat:

X509CertificateParser cp = new X509CertificateParser(); 

     //Get Sertifiacte 
     X509Certificate2 certClient = null; 
     X509Store st = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
     st.Open(OpenFlags.MaxAllowed); 
     X509Certificate2Collection collection = X509Certificate2UI.SelectFromCollection(st.Certificates, 
      "Please choose certificate:", "", X509SelectionFlag.SingleSelection); 
     if (collection.Count > 0) 
     { 
      certClient = collection[0]; 
     } 
     st.Close(); 
     //Get Cert Chain 
     IList<X509Certificate> chain = new List<X509Certificate>(); 
     X509Chain x509Chain = new X509Chain(); 

     x509Chain.Build(certClient); 

     foreach (X509ChainElement x509ChainElement in x509Chain.ChainElements) 
     { 
      chain.Add(DotNetUtilities.FromX509Certificate(x509ChainElement.Certificate)); 
     } 

Et voici mon code de signature:

PdfReader inputPdf = new PdfReader(fileInsert); 

       FileStream signedPdf = new FileStream(File_rename(fileInsert, "_signed"), FileMode.Create); 

       PdfStamper pdfStamper = PdfStamper.CreateSignature(inputPdf, signedPdf, '\0'); 

       IExternalSignature externalSignature = new X509Certificate2Signature(certClient, "SHA-1"); 

       PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance; 

       //signatureAppearance.SignatureGraphic = Image.GetInstance(pathToSignatureImage); 
       //signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(0, 00, 250, 150), inputPdf.NumberOfPages, "Signature"); 
       signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; 

       MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, 
        CryptoStandard.CMS); 
       inputPdf.Close(); 
       pdfStamper.Close(); 

fileinsert est le nom du fichier que vous voulez être signé et

File_rename(fileInsert, "_signed") 

est une méthode qui renomme le nom de fichier d'origine comme "noname.pdf" en "noname_signed.pdf".

Et les bibliothèques utilisées:

using Org.BouncyCastle.Security; 
using Org.BouncyCastle.X509; 
using System.Security.Cryptography.X509Certificates; 
using X509Certificate = Org.BouncyCastle.X509.X509Certificate; 

J'espère que cela aide, je l'ai écrit le code il y a quelques années en utilisant quelques exemples que j'ai trouvé la recherche des forums, mais je l'utilise encore parfois.