Se connecter / S'enregistrer

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

Solutions (1)
Tags :
  • web
  • Programmation
|
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 :

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


Quelqu'un aurait une idée?
Contenus similaires
  • Autres pages sur : verification integrite certificat rsacryptoserviceprovider
Meilleure solution
partage
|
certificat.Thumbprint est calculé, ce n'est pas une valeur stockée dans le certificat, non?
  • Commenter cette solution |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS