Comment faire pour extraire le nom de domaine d'un X509Certificate objet au cours de SslStream.AuthenticateAsClient? (.NET4)
J'ai un RemoteCertificateValidationCallback fonction appelée par SslStream.AuthenticateAsClient, qui est passé d'un X509Certificate objet.
Je voudrais extraire le nom de ce certificat, tel que je n'avais passé qu'une chaîne en AuthenticateAsClient, il aurait passé. (En supposant que pas d'autres questions.)
(Remarque: La propriété en question contient le nom de domaine, mais c'est à l'intérieur d'un "CN=..., S=..." etc chaîne formatée.)
Voir aussi: Comment extraire le CN de X509Certificate en Java? (Pose une question similaire pour Java, mais je ne peux pas trouver des catégories similaires .NET mentionné dans les réponses.)
(Suivi d'Eugène de réponse.)
J'ai essayé cette...
var cert2 = new System.Security.Cryptography.X509Certificates.X509Certificate2();
cert2.Import(certificate.GetRawCertData());
... mais cert2.SubjectName.Nom a toujours le CN= etc la mise en forme. Suis-je le fais mal?
Oh, tout à droite, puis. Désolé Adam.
OriginalL'auteur billpg | 2011-12-07
Vous devez vous connecter pour publier un commentaire.
J'ai fait de la manière suivante:
Vous pouvez également vérifier si le certificat est valide:
(Voir cette question pour la description de X509Certificate2 classe)
OriginalL'auteur IMil
Pour mon certificat de chaînes qu'il fonctionnait mieux avec un petit ajustement comme ce
...
OriginalL'auteur Soren_Skov
Utilisation GetRawCertData méthode pour obtenir le Certificat de la DER des données. Ensuite créer une instance de l'objet X509Certificate2 et charge le raw cert données à l'aide de L'importation() la méthode. Ensuite, utilisez SubjectName propriété d'accéder aux différents champs de l'objet. Remarque - vous devez également inspecter autre Nom de l'Objet de l'extension, mais malheureusement il n'y a pas de moyen facile de le faire .NET Framework classes (vous trouverez peut-être nécessaire d'utiliser la troisième partie de l'ICP de la bibliothèque pour le bon certificat de validation et de gestion).
On dirait que vous devez analyser le nom 🙁 -- Cette classe est comme une extension de la SubjectName ou IssuerName de la propriété, qui est le nom de la personne ou l'entité à qui le certificat est délivré. X. 500 est un standard international pour la distribution de services d'annuaire. Le nom unique utilise le format suivant: [X500:/C=indicatif du pays/O=Organization/OU=OrganizationUnit/CN=CommonName]
J'ai toujours penser que vous utilisez bibliothèque tierce pour la pratique de la gestion de certificats.
Merci pour cela. J'espérais que le code que .NET SslStream utilise en interne a une interface publique. C'est un peu rageant de savoir le code que j'ai envie est là, mais je ne peux pas l'appeler. 🙂
OriginalL'auteur Eugene Mayevski 'Allied Bits
J'ai utilisé la méthode suivante pour analyser les chaînes renvoyées à partir d'AD, il peut aider à analyser les données de votre réception:
Afin de lui donner une chaîne comme "CN=mon nom commun,CN=un autre nom commun,O=mon organisation" et elle retourne une liste contenant deux noms communs.
C'est juste un exemple d'une solution récursive. Il y a beaucoup de manières que vous pourriez couper la chaîne.
OriginalL'auteur Adam Naylor