2017-12-13 4 views
0

Ich verwende eine URL, um mithilfe von SOAP eine Verbindung zu einem Webdienst herzustellen. Anscheinend hat die URL kein korrektes https Protokoll und wenn ich über den Browser darauf zugreifen möchte, muss ich das "Risiko" dieser Verbindung akzeptieren.HTTPS-Zertifikat überschreiben

Mein Problem beginnt, wenn ich programmgesteuert zugreifen möchte. Wenn ich versuche, eine SOAP POST Anfrage zu senden, wird die Verbindung geschlossen und eine Ausnahme wird abgefangen.

"The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel."

Offenbar war dieses Problem häufig, und eine Menge von Ressourcen gefunden werden kann, this und this die upvoted werden.

Wenn ich diesen Teil des Codes versucht:

ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

nicht nur die Verbindung nicht funktioniert hat, aber jetzt bin ich ein gegeben:

"The remote server returned an error: (500) Internal Server Error."

Jetzt ist meine Frage. Der obige Code schaltet das Protokoll von https zu http?

Wenn nicht, was macht diese Codezeile wirklich?

+0

„die Verbindung nicht funktioniert, aber jetzt bin ich ein gegeben: ‚Der Remoteserver hat einen Fehler zurückgegeben:. (500) Internal Error Server‘Eigentlich bedeutet dies die Verbindung _did_ Arbeit, aber dass der Remote-Server abgestürzt, während – ADyson

+0

"Der obige Code schaltet das Protokoll von https auf http um?" Nein. Der Code bedeutet, dass der HTTP-Stack, der für Ihre Anfrage verwendet wird, alle Zertifikatsvalidierungsfehler ignoriert und die Anfrage einfach durchlässt. wie geschrieben, wird dies alle Anfragen an alle Hosts betreffen – spender

+0

@spender Ich habe viele Verbindungen, aber sie sind alle mit dem gleichen Host, also muss ich mich nicht darum sorgen. Also im Grunde tut dieser Teil des Codes seinen Teil und ändert weder die URL noch die Verbindung in irgendeiner Art. Also ist entweder meine Anfrage nicht korrekt oder die Fernbedienung Server kann damit nicht umgehen? – Noel

Antwort

0

Ich weiß nicht, ob dies die Antwort sein wird, aber da es nicht angemessen für einen Kommentar ist ...

Sie Zertifikatsüberprüfung nicht umgehen. Sie müssen wahrscheinlich nur die korrekte Version von TLS festlegen. Sie können experimentieren, um die höchste Version unter Verwendung einer zum Zeitpunkt unterstützt zu finden, anstatt sie von OR-zusammen .:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 

Wenn das nicht funktioniert, kann ein Zertifikat zu erhalten, müssen entweder die eine durch die verwendete Service oder einen höheren in der Zertifikatskette.

+0

Ich denke, das ist der erste Gedanke, den ich versuchte .. aber ich werde es morgen wieder versuchen, wenn ich zurück in mein Büro gehe, weil ich den Code gerade nicht habe – Noel

+0

Ich könnte nur das erste versuchen. 'Tls11' und' Tls12' waren keine bekannten Befehle an den Compiler. – Noel

+0

Welche Version von .net Framework verwenden Sie? Du brauchst mindestens 4.5. Sie müssen es möglicherweise aktualisieren, da die meisten Dienste TLS1.1 oder 1.2 erfordern. – Crowcoder