Ich versuche, eine SSL / TLS-Verbindung zum Testserver mit selbstsigniertem Zertifikat herzustellen . Die Kommunikation über einen unsicheren Kanal verlief ohne Probleme.
Hier ist mein Beispielcode, den ich basierend auf diesen Lösungen geschrieben habe: Zulassen nicht vertrauenswürdiger SSL-Zertifikate mit HttpClient C # Zertifikatfehler ignorieren? .NET-Client, der eine Verbindung zur SSL-Web-API herstellt
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
var c = new HttpClient();
var r = c.GetAsync("https://10.3.0.1:8443/rest/v1").Result;
if (r.IsSuccessStatusCode)
{
Log.AddMessage(r.Content.Get<string>());
}
else
{
Log.AddMessage(string.Format("{0} ({1})", (int)r.StatusCode, r.ReasonPhrase));
}
habe auch versucht:
var handler = new WebRequestHandler();
handler.ServerCertificateValidationCallback = delegate { return true; };
var c = new HttpClient(handler);
...
und das
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
aber jedes Mal habe ich eine Ausnahme:
InnerException: System.Net.Http.HttpRequestException
_HResult=-2146233088
_message=An error occurred while sending the request.
HResult=-2146233088
IsTransient=false
Message=An error occurred while sending the request.
InnerException: System.Net.WebException
_HResult=-2146233079
_message=The request was aborted: Could not create SSL/TLS secure channel.
HResult=-2146233079
IsTransient=false
Message=The request was aborted: Could not create SSL/TLS secure channel.
Source=System
StackTrace:
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
InnerException:
Was mache ich falsch? Warum kann ich keine Verbindung zu diesem Server herstellen (der über ein ungültig selbstsigniertes Zertifikat verfügt)?
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.SecurityProtocol
Wert sollte vielleicht der Standard sein. Oder zumindest, dass es mehr Einsicht direkt in die ausgelöste Ausnahme geben sollte.Wir haben das gleiche Problem erst heute gelöst. Sie müssen lediglich die Laufzeitversion von .NET erhöhen
4.5.2 hat bei dem oben genannten Problem nicht funktioniert , während 4.6.1 in Ordnung war
Wenn Sie die .NET-Version beibehalten müssen, legen Sie fest
quelle
Nur als Folgemaßnahme für alle, die noch darauf stoßen - ich hatte die ServicePointManager.SecurityProfile-Optionen hinzugefügt, wie in der Lösung angegeben:
Trotzdem wurde weiterhin der Fehler "Die Anforderung wurde abgebrochen: SSL / TLS-sicherer Kanal konnte nicht erstellt werden" angezeigt. Ich habe versucht, eine Verbindung zu einigen älteren Sprachservern mit HTTPS-SOAP-API-Schnittstellen herzustellen (z. B. Voicemail, IP-Telefonsysteme usw., die vor Jahren installiert wurden). Diese unterstützen nur SSL3-Verbindungen, wie sie vor Jahren zuletzt aktualisiert wurden.
Man würde denken, dass die Aufnahme von SSl3 in die Liste der SecurityProtocols hier den Trick machen würde, aber das tat es nicht. Die einzige Möglichkeit, die Verbindung zu erzwingen, bestand darin, NUR das Ssl3-Protokoll und keine anderen einzuschließen:
Dann geht die Verbindung durch - scheint mir ein Fehler zu sein, aber dies hat bis vor kurzem keine Fehler bei Tools ausgelöst, die ich für diese Server bereitstelle, die es seit Jahren gibt - ich glaube, Microsoft hat damit begonnen, Systemänderungen einzuführen, die dies aktualisiert haben Verhalten zum Erzwingen von TLS-Verbindungen, sofern keine andere Alternative vorhanden ist.
Wie auch immer - wenn Sie immer noch auf einige alte Sites / Server stoßen, lohnt es sich, es auszuprobieren.
quelle
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Ssl3
. Vielen Dank! Der vollständige Code ist in der Invoke-CUCMSOAPAPIFunctionVerschieben Sie diese Zeile: ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
Vor dieser Zeile: HttpWebRequest request = (HttpWebRequest) WebRequest.Create (uri);
Ursprünglicher Beitrag: KB4344167 Sicherheitsupdate bricht TLS-Code
quelle
In meinem Fall wurde TLS1_2 sowohl auf dem Client als auch auf dem Server aktiviert, aber der Server verwendete MD5, während der Client es deaktivierte. Testen Sie also sowohl Client als auch Server auf http://ssllabs.com oder testen Sie mit openssl / s_client, um zu sehen, was passiert. Überprüfen Sie auch die ausgewählte Chiffre mit Wireshark.
quelle
TLS 1.0 und 1.1 sind jetzt End of Life. Ein Paket auf unserem Amazon-Webserver wurde aktualisiert, und wir haben diesen Fehler erhalten.
Die Antwort ist oben, aber Sie sollten nicht verwenden
tls
odertls11
mehr.Fügen Sie dies speziell für ASP.Net zu einer Ihrer Startmethoden hinzu.
public Startup() { ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12;
aber ich bin sicher, dass so etwas in vielen anderen Fällen funktionieren wird.
quelle
Wenn Sie einen neuen Domainnamen verwenden und alle oben genannten Schritte ausgeführt haben und immer noch der gleiche Fehler angezeigt wird, überprüfen Sie, ob Sie den DNS-Cache auf Ihrem PC löschen. Löschen Sie Ihren DNS für weitere Details.
Windows® 8
Führen Sie die folgenden Schritte aus, um Ihren DNS-Cache zu löschen, wenn Sie Windows 8 verwenden:
Drücken Sie auf Ihrer Tastatur Win + X, um das WinX-Menü zu öffnen.
Klicken Sie mit der rechten Maustaste auf Eingabeaufforderung und wählen Sie Als Administrator ausführen.
Führen Sie den folgenden Befehl aus:
ipconfig / flushdns
Wenn der Befehl erfolgreich ist, gibt das System die folgende Meldung zurück:
Die Windows IP-Konfiguration hat den DNS-Resolver-Cache erfolgreich geleert.
Windows® 7
Führen Sie die folgenden Schritte aus, um Ihren DNS-Cache zu löschen, wenn Sie Windows 7 verwenden:
Klicken Sie auf Start.
Geben Sie cmd in das Textfeld Suche im Startmenü ein.
Klicken Sie mit der rechten Maustaste auf Eingabeaufforderung und wählen Sie Als Administrator ausführen.
Führen Sie den folgenden Befehl aus:
ipconfig / flushdns
Wenn der Befehl erfolgreich ist, gibt das System die folgende Meldung zurück: Die Windows-IP-Konfiguration hat den DNS-Resolver-Cache erfolgreich geleert.
quelle
ipconfig /flushdns
in C #?Ich bin auf diesen Thread gestoßen, weil ich auch den Fehler hatte. Es konnte kein sicherer SSL / TLS-Kanal erstellt werden. In meinem Fall habe ich versucht, über PowerShell auf eine Siebel-Konfigurations-REST-API zuzugreifen
Invoke-RestMethod
, und keiner der oben genannten Vorschläge hat geholfen.Schließlich stolperte ich über die Ursache meines Problems: Der Server, mit dem ich Kontakt aufnahm, erforderte die Authentifizierung des Clientzertifikats.
Damit die Aufrufe funktionieren, musste ich dem Client-Zertifikat (einschließlich des privaten Schlüssels) den folgenden
-Certificate
Parameter bereitstellen :$Pwd = 'certificatepassword' $Pfx = New-Object -TypeName 'System.Security.Cryptography.X509Certificates.X509Certificate2' $Pfx.Import('clientcert.p12', $Pwd, 'Exportable,PersistKeySet') Invoke-RestMethod -Uri 'https://your.rest.host/api/' -Certificate $Pfx -OtherParam ...
Hoffentlich kann meine Erfahrung jemand anderem helfen, der meinen besonderen Geschmack für dieses Problem hat.
quelle