Wie verwende ich die SSL-Zertifikate mit HttpWebRequest-Klasse in C#?

Derzeit Schreibe ich ein Dienstprogramm-Anwendung, die eine Verbindung zu einer bestimmten IP und port und überprüfen Sie die Angaben im SSL-Zertifikat mit HttpWebRequest. Wenn ich versuche, zu extrahieren Sie das Zertifikat bekomme ich eine Fehlermeldung, dass eine Ausnahme geworfen wurde. Die Ausnahme zu sein scheint, weil der Akt der Bewältigung des SSL-Zertifikats auszulösen scheint noch eine weitere überprüfung.

Hier ist der code, und vielleicht kann mir jemand entweder mir zeigen, einen besseren Weg, dies zu tun, oder wenn mir etwas fehlt. Ich interessiere mich nicht, wenn das SSL-Zertifikat ist abgelaufen oder entspricht nicht der URL. Nichts davon ist relevant für das, was ich Tue.

Wenn ich weisen Sie die X509Certificate-in die Stellvertretung eine neue variable, und schau dir die variable im debugger, der alle Eigenschaften zeigen SSLCert.Emittent hat eine Ausnahme vom Typ 'System.Sicherheit.Die Kryptographie.CyrptographicException'

Wenn ich versuchen, auf eine Eigenschaft der SSLCert, bekomme ich die folgende Exception geworfen: m_safeCertContext ist ein ungültiges handle

Ich gelöscht gesucht, die Ausnahme, aber alles weist auf ein ungültiges Zertifikat, die wahr sein könnte, wenn das Zertifikat abgelaufen ist, und könnte wahr sein, für die IP-und port-Kombination, die ich am Anschluss an. Aber da ich mich anschließen, um die IP über die IP und nicht alles, was würden Sie übereinstimmen, den gemeinsamen Namen, ich erwarte, dass und könnte weniger Pflege, als ich noch die Informationen benötigen.

Dem code unten, habe ich einige Kommentare in als auch für das, was nicht funktioniert und was funktioniert nicht.

 //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;
  • Es gibt eine Menge von Fragen und Antworten, die hier zum arbeiten mit SSL und Zertifikate in HttpWebRequest. Haben Sie schaute auf die "Verwandten Fragen" auf der rechten Seite, oder erfolgt eine Suche nach [ssl-Zertifikat httpwebrequest]?
  • Ja, so ziemlich jeder fragt sich, wie client-Zertifikate verwenden, die ich nicht verwende, oder ist immer ein Fehler innerhalb HttpWebRequest, weil ein ungültiges Zertifikat, welches ich bereits Umgang.
  • Ich sollte hinzufügen, das große problem ist, dass ich die kopieren möchten X509Certificate zu einem anderen X509Certificate-Typ-variable und .NET angezeigt werden, überprüfen Sie das Zertifikat erneut, wenn ich "dabei.SSLCert = Zertifikat;"
  • Was ist die detaillierte Ausnahme geworfen, wo Ihr Beispiel nicht? Bitte fügen Sie es dem OP, wenn du kannst...
  • Ich fügte hinzu, mehr Informationen, mit der Ausnahme und Fehler geworfen.
  • Hier ist etwas relevant für Ihre Ausnahme, dass Sie sehen: geekswithblogs.net/timh/archive/2006/04/18/75477.aspx

InformationsquelleAutor omniplex | 2011-03-11
Schreibe einen Kommentar