Comment puis-je utiliser les certificats SSL avec HttpWebRequest en C#?

Actuellement, je suis en train d'écrire une application utilitaire qui va se connecter à une adresse IP et le port et vérifier les informations contenues dans le certificat SSL à l'aide de HttpWebRequest. Lorsque je tente d'extraire le certificat, j'obtiens une erreur qu'une exception a été levée. L'exception semble être à cause de la loi d'adaptation du certificat SSL semble déclencher encore une autre vérification de la validation.

Voici le code, et peut-être quelqu'un pouvez me montrer une meilleure façon de le faire ou si je suis en manque de quelque chose. Je ne m'inquiète pas si le Certificat SSL est expiré ou ne correspond pas à l'URL. Rien de tout cela est pertinent pour ce que je suis en train de faire.

Quand j'assigne le X509Certificate dans le déléguer à une nouvelle variable, et de regarder la variable dans le débogueur, toutes les propriétés de montrer SSLCert.L'émetteur a déclenché une exception de type 'System.De sécurité.La cryptographie.CyrptographicException'

Lorsque j'essaie d'accéder à une propriété de SSLCert, j'ai le Exception levée: m_safeCertContext est un handle non valide

Je be recherché pour cette exception, mais tout porte à un certificat non valide, ce qui pourrait être vrai si le certificat est expiré, et peut-être vrai pour l'IP et le port de combinaison que je me connecte. Mais depuis que je me connecte à l'adresse IP à l'aide de l'IP et pas tout ce qui pourrait correspondre au nom commun, j'attends que et ne s'intéressent pas tant que j'ai encore besoin de l'information.

Le code est ci-dessous, j'ai mis quelques commentaires aussi bien pour ce qui ne fonctionne pas et ce qui ne fonctionne pas.

 //To get around the SSL validation in the HttpWebRequest
        System.Net.ServicePointManager.ServerCertificateValidationCallback =
            delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate,
                        System.Security.Cryptography.X509Certificates.X509Chain chain,
                        System.Net.Security.SslPolicyErrors sslPolicyErrors)
            {
                //The below works but isn't what I want. CertName and ExpireDate are both Strings
                this.CertName = ProcessSubject(certificate.Subject);
                this.ExpireDate = certificate.GetExpirationDateString();
                //The below works but the X509Certificate SSLCert shows exceptions in the debugger for most of the properties.
                this.SSLCert = certificate;

                return true; //**** Always accept
            };
        HttpWebRequest myRequest = (HttpWebRequest)System.Net.WebRequest.Create("https://" + this.IP + ":" + this.Port + "/SSLCheck.html");
        myRequest.KeepAlive = false;
        myRequest.Method = "GET";

        try
        {
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
        }
        catch (Exception e)
        {
            if (e.Message != "The remote server returned an error: (404) Not Found.")
            {
                throw Exception("Error");
            }

        }

        //THE BELOW FAILS
        this.CertName = this.SSLCert.Subject;
Il y a beaucoup de questions et de réponses ici sur le travail avec SSL et les certificats HttpWebRequest. Avez-vous regardé le "Liées" questions sur la droite, ou faites une recherche [certificat ssl httpwebrequest]?
Oui, à peu près tout le monde se demande comment utiliser les certificats clients, dont je ne suis pas à l'aide, ou une erreur dans HttpWebRequest en raison d'un certificat non valide, que je suis déjà en cours de traitement.
Je dois ajouter, le gros problème est que je veux copier le X509Certificate à l'autre X509Certificate variable de type et .NET semble être de la validation du certificat à nouveau quand je fais ".SSLCert = certificat;"
Qu'est-ce que détaillées de l'exception levée lorsque votre exemple échoue? Veuillez ajouter à votre OP si vous pouvez...
J'ai ajouté plus d'informations avec l'exception et d'erreurs levée.

OriginalL'auteur omniplex | 2011-03-11