Domanda

scusate il mio inglese.

Ho un piccolo problema. Voglio verificare l'integrità del mio certificato.

Faccio questo codice:

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);

ma ho già valutato " false " per var " verif "

È stato utile?

Soluzione

Non ci sono domande reali qui. Hai ragione a ignorare incondizionatamente il valore iniziale di verif. Ancora più importante, hai preso in considerazione l'utilizzo di X509Certificate2 per effettuare la verifica?

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

Penso che sia più saggio che reinventare la ruota.

MODIFICA: se stai verificando una catena di certificati, credo che tu voglia usare X509Chain e in particolare Proprietà ChainStatus .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top