C# Comment puis-je valider un Root-CA-Cert certificat x509) de la chaîne?
Disons que j'ai trois certificats (au format Base64)
Root
|
--- CA
|
--- Cert (client/signing/whatever)
Comment puis-je valider les certificats et chemin d'accès du certificat/chaîne en C#?
(Tous les trois certificats ne peuvent pas être dans mon ordinateur cert magasin)
Modifier: BouncyCastle a pour fonction de vérifier. Mais je vais essayer de ne pas utiliser toute la troisième partie de la bibliothèque.
byte[] b1 = Convert.FromBase64String(x509Str1);
byte[] b2 = Convert.FromBase64String(x509Str2);
X509Certificate cer1 =
new X509CertificateParser().ReadCertificate(b1);
X509Certificate cer2 =
new X509CertificateParser().ReadCertificate(b2);
cer1.Verify(cer2.GetPublicKey());
Si le cer1 n'est pas signé par cert2 (CA ou de la racine), il n'y aura d'exception. C'est exactement ce que je veux.
OriginalL'auteur Jacob | 2011-09-07
Vous devez vous connecter pour publier un commentaire.
La
X509Chain
classe a été conçu pour cela, vous pouvez même personnaliser la façon dont il effectue la chaîne de processus de construction.La
X509Chain
contiendra plus d'informations sur l'échec de validation aprèsBuild() == false
si vous en avez besoin.Edit: Ce sera simplement de s'assurer que votre autorité de certification sont valides. Si vous voulez vous assurer que la chaîne est identique, vous pouvez vérifier l'empreinte de pouce manuellement. Vous pouvez utiliser la méthode suivante pour s'assurer que la certification de la chaîne est correcte, il s'attend à la chaîne dans l'ordre:
..., INTERMEDIATE2, INTERMEDIATE1 (Signer of INTERMEDIATE2), CA (Signer of INTERMEDIATE1)
Je ne suis pas en mesure de tester ce parce que je n'ai pas de pleine chaîne de CA avec moi, de sorte qu'il serait mieux pour le débogage et l'étape dans le code.
essayez la nouvelle méthode.
Merci Jonathan. Mais pas de travail. Il ressemble à la chaîne.La construction est de vérifier la validité des certificats. Pas le cert chemin. Aussi longtemps que les certificats sont valides (tho le cert de la chaîne/du chemin est mauvais), le résultat est vrai. empreinte méthode ne fonctionne pas parce que tous les pouces sont différentes (même dans le chemin d'accès correct/chaîne)
c'est pourquoi j'ai valider l'empreinte de pouce manuellement, comme je l'ai dit, étape par le biais de la nouvelle partie du code. Aussi j'ai fait une faute de frappe dans le
if (chain.Build)
peu. La mise à jour.primaryCertificate est certificat de fin et supplémentaires certs sont à la racine de CA
OriginalL'auteur Jonathan Dickinson