Frage

sorry für mein Englisch.

ich habe ein kleines Problem. Ich möchte die Integrität meiner certificat überprüfen.

Ich mache diesen 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);

, aber ich habe schon Wert "false" für die var "verif"

War es hilfreich?

Lösung

Es gibt keine eigentliche Frage hier. Sie haben Recht, dass Sie unbedingt den Anfangswert von verif ignorieren. Noch wichtiger ist, haben Sie mit X509Certificate2 betrachtet Überprüfung zu tun:

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

Ich denke, das ist weiser als die neu zu erfinden das Rad.

EDIT: Wenn Sie eine Kette von Zertifikaten zu überprüfen Ich glaube, Sie X509Chain und insbesondere die ChainStatus Eigenschaft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top