2 votes

La signature est invalide après avoir joint le certificat au document pdf traité. Je ne parviens pas à savoir s'il y a un problème dans le code ou le certificat.

J'ai un pdf signé et je joins un certificat (.pfx) au document par l'intermédiaire de itextsharp . Tout dans le code est testé et fonctionne bien mais quand je télécharge et ouvre le pdf dans acrobat reader il dit que la signature n'est pas valide j'ai changé les préférences essayé presque tous les paramètres depuis hier mais il n'y a pas de chance.

Deux choses que j'ai remarquées dans le détail du certificat : pour son " prévu " : la signature NUMÉRIQUE n'est pas mentionnée alors que le document crypté etc. l'est. Est-ce la raison pour laquelle le document n'est pas validé pour la signature ? et la deuxième chose qu'il dit : le certificat a une erreur : non valide pour l'utilisation

code pour joindre le certificat ;

 var pathCert = 
 Server.MapPath("..../App_Data/Certificates/.....sdd.pfx");

string Password = "**************";
var pass = Password.ToCharArray();

System.Security.Cryptography.X509Certificates.X509Store store =
new System.Security.Cryptography.X509Certificates.X509Store
(Cryptography.X509Certificates.StoreLocation.CurrentUser);

store.Open(System.Security.
Cryptography.X509Certificates.OpenFlags.ReadOnly);

string PfxFileName = pathCert;
string PfxPassword = Password;

System.Security.Cryptography.X509Certificates.X509Certificate2 cert = new 

 System.Security.Cryptography.X509Certificates.X509Certificate2
 (PfxFileName, PfxPassword, Security.Cryptography.X509Certificates.
 X509KeyStorageFlags.MachineKeySet);

 string SourcePdfFileName = "(Directory)/Desktop/tetsing/test.pdf";
 string DestPdfFileName = "(Directory)/Desktop/tetsing/test_Signed.pdf";
 Org.BouncyCastle.X509.X509CertificateParser cp = new 
 Org.BouncyCastle.X509.X509CertificateParser();
 Org.BouncyCastle.X509.X509Certificate[] chain = new 
 Org.BouncyCastle.X509.X509Certificate[] { 
 cp.ReadCertificate(cert.RawData) };
 iTextSharp.text.pdf.security.IExternalSignature externalSignature = new 
 iTextSharp.text.pdf.security.X509Certificate2Signature(cert, "SHA-1");
 PdfReader pdfReader = new PdfReader(SourcePdfFileName);
 FileStream signedPdf = new FileStream(DestPdfFileName, FileMode.Create);  
 //the output pdf file
 PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, 
 '\0');
 PdfSignatureAppearance signatureAppearance = 
 pdfStamper.SignatureAppearance;

 signatureAppearance.Reason = "Signed Document";
 signatureAppearance.Location = "Unknown";
 signatureAppearance.SignatureRenderingMode = 
 PdfSignatureAppearance.RenderingMode.DESCRIPTION;
 MakeSignature.SignDetached(signatureAppearance, externalSignature, 
 chain, 
 null, null, null, 0, CryptoStandard.CMS);

 pdfReader.Close();

0voto

Adobe acrobat reader est très pointilleux sur l'utilisation de la clé du certificat et l'objectif visé (utilisation de la clé et utilisation de la clé améliorée) et d'autres détails du certificat. Avez-vous essayé un certificat avec Digital Signature comme utilisation des clés et Code Signing comme prévu ?

Ici est un article de blog qui montre comment auto-signer un certificat avec ces propriétés pour faire des signatures si vous n'avez pas accès à un système de gestion des certificats. réel un certificat de signature de confiance publique.

0voto

mkl Points 13928

le certificat a une erreur : non valide pour l'utilisation

Selon l'Adobe Guide des signatures numériques pour l'informatique Adobe Acrobat accepte seulement

  • une ou plusieurs des valeurs d'utilisation des clés suivantes (le cas échéant)

    • non répudiation
    • signTransaction (11.0.09 seulement)
    • digitalSignature (11.0.10 et versions ultérieures)
  • et une ou plusieurs des valeurs d'utilisation de la clé étendue suivantes (le cas échéant)

    • Protection de l'email
    • CodeSigning
    • anyExtendedKeyUsage
    • 1.2.840.113583.1.1.5 (Adobe Authentic Documents Trust)

Veuillez vérifier votre certificat en conséquence et le remplacer s'il ne remplit pas cette condition.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X