Tom's Guide > Forum > Programmation > [Résolu] [C#] Vérification intégrité Certificat { RSACryptoServiceProvider }

[Résolu] [C#] Vérification intégrité Certificat { RSACryptoServiceProvider }

Forum Programmation : [Résolu] [C#] Vérification intégrité Certificat { RSACryptoServiceProvider }

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !

Lire la meilleure réponse, apportée par CRicky.

Mot :    Pseudo :           
 

Bonjour,

En fait, j'ai un certificat client qui arrive sur mon site web, et je souhaiterais vérifier son intégrité.

Dans ce certificat j'ai, entre autre, les informations suivantes:
- l'empreinte numérique ( certificat.Thumbprint );
- le contenu des données brut ( certificat.RawData );
- la clé publique ( certificat.PublicKey ).

Je sais qu'il faut crypter l'empreinte numérique avec la clé publique pour obtenir une empreinte déchiffré, hashé le contenu du certificat pour obtenir l'empreinte calculé et comparer les deux pour voir si ils sont exactes.

C'est ce que je fait, mais je reçois toujours le résultat "false".

Voici le code que j'effectue :

Code :
  1. using System.Security.Cryptography;
  2. using System.Runtime.InteropServices;
  3. using System.Security.Cryptography.X509Certificates;
  4. SHA1Managed sha1 = new SHA1Managed();
  5. RSACryptoServiceProvider csp = null;
  6. AsymmetricAlgorithm rsaAlgo = certificatEnCours.PublicKey.Key;
  7. byte[] data = null;
  8. byte[] hash = null;
  9. string keyPublic = "";
  10. string signatureNumérique = "";
  11. bool verif = false;
  12. // ------------- PARTIE 1 -------------
  13. // On récupère l'empreinte numérique
  14. signatureNumérique = certificatEnCours.Thumbprint;
  15. //data = System.Text.Encoding.Unicode.GetBytes(signatureNumérique);
  16. //data = System.Text.Encoding.ASCII.GetBytes(signatureNumérique);
  17. // On convertit l'empreinte numérique en tableau de bytes
  18. data = Convert.FromBase64String(signatureNumérique);
  19. // ------------- PARTIE 2 -------------
  20. // On hashe le contenu du certificat en SHA1
  21. hash = sha1.ComputeHash(certificatEnCours.RawData);
  22. // On convertit la valeur xml de la clé en chaîne de caractère
  23. keyPublic = rsaAlgo.ToXmlString(false);
  24. // On instancie RSACryptoServiceProvider
  25. csp = new RSACryptoServiceProvider();
  26. // On importe la clé publique dans le RSACryptoServiceProvider
  27. csp.FromXmlString(keyPublic);
  28. // ------------- COMPARAISON --------------
  29. // On compare la valeur hashé du contenu du certificat avec
  30. //  la signature numérique :
  31. verif = csp.VerifyData(hash, CryptoConfig.MapNameToOID("SHA1" ), data);



Quelqu'un aurait une idée?

certificat.Thumbprint est calculé, ce n'est pas une valeur stockée dans le certificat, non?
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.
Meilleure réponse

certificat.Thumbprint est calculé, ce n'est pas une valeur stockée dans le certificat, non?


Message édité par CRicky le 19-06-2009 à 21:40:29
------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Tom's Guide > Forum > Programmation > [Résolu] [C#] Vérification intégrité Certificat { RSACryptoServiceProvider }
Aller à :

Il y a 769 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Liens