Pregunta

perdón por mi inglés.

Tengo un pequeño problema. Quiero verificar la integridad de mi certificado.

Hago este código:

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

pero ya tengo el valor " false " para la var " verif "

¿Fue útil?

Solución

No hay una pregunta real aquí. Tiene razón en que ignora incondicionalmente el valor inicial de verif. Más importante aún, ¿ha considerado usar X509Certificate2 para hacer la verificación ?:

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

Creo que esto es más sabio que reinventar la rueda.

EDITAR: si está verificando una cadena de certificados, creo que desea utilizar X509Chain y en particular el Propiedad ChainStatus .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top