Question

désolé pour mon anglais.

J'ai un petit problème. Je souhaite vérifier l'intégrité de mon certificat.

Je crée ce code:

using System.Security.Cryptography;
using System.Runtime.InteropServices;
using System.Security.Cryptography.X509Certificates; 

SHA1Managed sha1 = new SHA1Managed();
RSACryptoServiceProvider csp = null;
AsymmetricAlgorithm rsaAlgo = certificatEnCours.PublicKey.Key;
byte[] data = null;
byte[] hash = null;

string keyPublic = "";
string signatureNumérique = "";

bool verif = false;

// ------------- PART 1 -------------

signatureNumérique = certificatEnCours.Thumbprint;

data = Convert.FromBase64String(signatureNumérique);

// ------------- PART 2 -------------

hash = sha1.ComputeHash(certificatEnCours.RawData);

keyPublic = rsaAlgo.ToXmlString(false);

csp = new RSACryptoServiceProvider();

csp.FromXmlString(keyPublic);

// ------------------------------

verif = csp.VerifyData(hash, CryptoConfig.MapNameToOID("SHA1"), data);

mais j'ai déjà la valeur " false " pour la var " verif "

Était-ce utile?

La solution

Il n’ya pas de question réelle ici. Vous avez raison, vous ignorez inconditionnellement la valeur initiale de verif. Plus important encore, avez-vous envisagé d'utiliser X509Certificate2 pour effectuer la vérification?:

X509Certificate2 x2 = new X509Certificate2(certificatEnCours);
bool verif = x2.Verify();

Je pense que cela est plus sage que de réinventer la roue.

EDIT: Si vous vérifiez une chaîne de certificats, je pense que vous souhaitez utiliser X509Chain et en particulier le Propriété ChainStatus .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top