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.