De vérifier la signature de certificat x509
J'ai:
- certificat x509 (Base64);
- Chaîne de données;
- Signature de la chaîne de données (Base64).
Est-il possible de vérifier la signature?
Mon code:
bool valid = false;
var signature = Convert.FromBase64String(base64Signature);
var data = Encoding.UTF8.GetBytes(stringData);
var x509 = new X509Certificate2(Convert.FromBase64String(certificate));
var dsa = x509.PublicKey.Key as DSACryptoServiceProvider;
if (dsa!=null)
valid = dsa.VerifySignature(data, signature);
else {
var rsa = x509.PublicKey.Key as RSACryptoServiceProvider;
if (rsa!=null)
valid = rsa.VerifyHash(data, ???, signature);
}
Je ne sais pas ce que je dois utiliser à la place de ???. Il est possible d'obtenir de l'algorithme de hachage de certificat?
Pouvez-vous préciser si vous souhaitez vérifier la signature du certificat (faite par son émetteur) ou de la signature de certaines données, fait avec la clé privée correspondant au certificat?
Je veux vérifier signatue de certaines données (stringData).
Je veux vérifier signatue de certaines données (stringData).
OriginalL'auteur Marat Faskhiev | 2010-07-16
Vous devez vous connecter pour publier un commentaire.
L'expéditeur du message d'origine peut utiliser quel que soit l'algorithme qu'il aime pour signer son message, à l'aide de la clé privée correspondant au certificat. Alors que vous pouvez obtenir l'OID de l'algorithme utilisé pour signer le certificat de son la SignatureAlgorithm bien, rien n'empêche à l'expéditeur d'utiliser une autre signature ou de l'algorithme de hachage.
Selon la la documentation, la seule valide les algorithmes de hachage pour le RSA fournisseur sont SHA1 et MD5. Peut-être que vous devriez essayer VerifyHash avec les deux algorithmes et de vérifier ce qui réussit. Vous pouvez obtenir la bonne OID de chacun à l'aide de la CryptoConfig.MapNameToOID méthode comme ceci:
CryptoConfig.MapNameToOID("MD5");
pour la deuxième ligne.Merci. Une remarque: je dois utiliser VerifyData.
OriginalL'auteur Panagiotis Kanavos