44 Stimmen

Wie man einen Zertifikatsfehler mit c# 2.0 WebClient ignoriert - ohne Zertifikat

Verwendung von Visual Studio 2005 - C# 2.0, System.Net.WebClient.UploadData(Uri address, byte[] data) Windows Server 2003

Hier ist also eine abgespeckte Version des Codes:

static string SO_method(String fullRequestString)
{
    string theUriStringToUse = @"https://10.10.10.10:443"; // populated with real endpoint IP:port
    string proxyAddressAndPort = @"http://10.10.10.10:80/"; // populated with a real proxy IP:port
    Byte[] utf8EncodedResponse; // for the return data in utf8
    string responseString; // for the return data in utf16

    WebClient myWebClient = new WebClient(); // instantiate a web client
    WebProxy proxyObject = new WebProxy(proxyAddressAndPort, true);// instantiate & popuylate a web proxy
    myWebClient.Proxy = proxyObject; // add the proxy to the client
    myWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); // stick some stuff in the header

    UTF8Encoding utf8Encoding = new UTF8Encoding(false);// create a utf8 encoding
    Byte[] utf8EncodedRequest = HttpUtility.UrlEncodeToBytes(fullRequestString, utf8Encoding); // convert the request data to a utf8 byte array

    try
    {
        utf8EncodedResponse = myWebClient.UploadData(theUriStringToUse, "POST", utf8EncodedRequest); // pass the utf8-encoded byte array
        responseString = utf8Encoding.GetString(utf8EncodedResponse); // get a useable string out of the response
    }
    catch (Exception e)
    {
        // some other error handling
        responseString = "<CommError><![CDATA[" + e.ToString() + "]]></CommError>";// show the basics of the problem
    }
    return responseString;// return whatever ya got
}

Ich erhalte folgende Fehlermeldung:

Die zugrunde liegende Verbindung wurde geschlossen: Es konnte keine Vertrauensbeziehung für den sicheren SSL/TLS-Kanal hergestellt werden.

Ich habe nicht viel Kontrolle, um zu sehen, was passiert, wenn die Anfrage rausgeht. Mir wird gesagt, dass sie das richtige Ziel erreicht und ein "Zertifikatsfehler" vorliegt. Das liegt angeblich daran, dass die IP-Adresse in meiner Anfrage und die URL, zu der sie aufgelöst wird, nicht übereinstimmen. Ich habe mehr als eine IP-Adresse, zu der ich Round-Robin durchführen soll, so dass die Angabe der URL nicht funktioniert. Ich hänge kein Zertifikat an - und das soll ich laut den Endpunkteigentümern auch nicht tun. Laut "ihnen" ist der Zertifikatsfehler "normal und ich soll ihn ignorieren.

Das fragliche Zertifikat ist angeblich eines der vielen Verisign-Zertifikate, die auf unserem Server "einfach da" sind. Die Beispiele, die ich für das Ignorieren von Zertifikatsfehlern gesehen habe, scheinen alle zu implizieren, dass der Anfragende ein bestimmtes x509-Zertifikat anhängt (was ich nicht tue).

Ich sah hinüber .net WebService, ssl-Validierung umgehen! was irgendwie mein Problem beschreibt - nur irgendwie auch nicht, weil ich nicht weiß, auf welches Zertifikat (wenn überhaupt) ich mich beziehen soll.

Gibt es eine Möglichkeit, den Fehler zu ignorieren, ohne zu wissen, welches Zertifikat das Problem verursacht?

  • und bitte - Samthandschuhe, kleine Worte und "für Dummies"-Code, denn ich bin nicht gerade ein harter Brocken.

  • Dieser Datenverkehr läuft über eine private Leitung - ich gehe also davon aus, dass das Ignorieren des Zertifizierungsfehlers nicht so schlimm ist, wie wenn es sich um offenen Internetverkehr handelt.

1voto

MichaelDarkBlue Punkte 129

Hier ist der VB.net-Code, um WebClient dazu zu bringen, das SSL-Zertifikat zu ignorieren.

Net.ServicePointManager.ServerCertificateValidationCallback = New Net.Security.RemoteCertificateValidationCallback(Function() True)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X