CFNetwork SSLHandshake failed iOS 9
hat jemand mit der iOS 9 beta 1 hatte dieses Problem?
Verwende ich standard-NSURLConnection, um eine Verbindung zu einem webservice und sobald ein Aufruf an den webservice bekomme ich die folgende Fehlermeldung. Dies ist zurzeit in der iOS 8.3
Möglich beta-bug? irgendwelche Ideen oder Gedanken wäre toll ! Ich weiß, das ist sehr früh in iOS 9 Entwicklung
Hier ist die komplette Fehlermeldung:
CFNetwork SSLHandshake failed (-9824)
NSURLSession/NSURLConnection HTTP laden fehlgeschlagen (kCFStreamErrorDomainSSL, -9824)
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://mywebserviceurl"]];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
InformationsquelleAutor user3099837 | 2015-06-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
iOS 9 und OS x 10.11 erfordern TLSv1.2 SSL für alle hosts, die Sie planen, zum anfordern von Daten aus, wenn Sie angeben, Ausnahme Domänen in Ihrem app-Info.plist-Datei.
Die syntax für die Info.plist-Konfiguration sieht so aus:
Wenn Ihre Anwendung (ein web-browser von Drittanbietern, zum Beispiel) braucht, um eine Verbindung zu beliebigen hosts konfigurieren Sie es wie folgt:
Wenn du Schwierigkeiten hast, dies zu tun, ist es wahrscheinlich am besten aktualisieren Sie Ihre Server mit TLSv1.2 und SSL, wenn Sie es nicht schon getan hast. Dies sollte als eine vorübergehende Lösung.
Als heute, die Vorabversion der Dokumentation macht keine Erwähnung von jeder dieser Optionen für die Konfiguration in irgendeiner spezifischen Weise. Sobald es funktioniert, ich werde zu aktualisieren, die Antwort einen link zu der entsprechenden Dokumentation.
hey steve ich kann nicht scheinen, um die Ausnahmen domain Beispiel zu arbeiten , haben Sie irgendwelche Ideen durch Zufall, ich habe gerade kopiert und eingefügt werden in .plist geändert TLSv1.1, TLSv1.0 und die domain auf unsere domain ohne https:// etc
Sorry für den langen chat, aber ich fand es heraus, ich brauchte, um deaktivieren <key>NSTemporaryExceptionRequiresForwardsecrecy</key> <false/>
NSTemporaryExceptionMinimumTLSVersion wird verwendet, um zu sagen, ATS, Sie arbeiten mit einer nicht 1.2 server. Zum Beispiel, wenn Sie versuchen, eine Verbindung zu einem host, die verwendet TLS 1.0. Sie müssen auch die NSTemporaryExceptionRequiresForwardsecrecy auf false gesetzt, als user3099837 oben angegeben.
ste.vn/2015/06/10/... - Dies ist der blog, in dem die Antwort stammt aus.
InformationsquelleAutor Steven Peterson
In iOS 10+, wird die TLS-Zeichenfolge MUSS in der form "TLSv1.0". Es kann sich nicht einfach "1.0". (Seufz)
Folgende Kombination der anderen Antworten funktioniert.
Lassen Sie uns sagen, Sie versuchen, eine Verbindung zu einem host - (YOUR_HOST.COM), die nur TLS 1.0.
Fügen Sie diese zu Ihrem app-Info.plist
Scheint, dass das hinzufügen
NSTemporaryExceptionRequiresForwardSecrecy
hat den trick für mich, danke!Diese version funktionierte bei mir nicht auf iOS9.1 - ich brauchte, um das TLSVersion string-format in einer der anderen Antworten <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string>
ich füge diesen code vor </plist>, plist erroor
Dies funktioniert aber meine Frage ist: bedeutet das, dass meine app nicht ssl verwenden, wenn diese Parameter aktiviert sind und die Daten nicht verschlüsselt?
InformationsquelleAutor Womble
Weitere Infos Konfigurieren von App-Transport-Sicherheit-Ausnahmen in iOS 9 und OS x 10.11
Diese Versand einer App Mit App-Transport-Security deckt einige gute debugging-Tipps
ATS Ausfall
CFNETWORK_DIAGNOSTICS
nscurl
Eine weitere debugging-tip, um zu überprüfen, welche TLS-Verbindung cipher verwendet wird, die von Ihrem server: curl -v https://<hostname>
Irgendwelche Ideen auf, was das problem verursachen kann, wenn curl führen Sie alle Schritte in Ordnung?
hinzufügen Sie können explenation wie "Setzen Sie die Umgebungsvariable CFNETWORK_DIAGNOSTICS 1 "?
Lesen Sie, wie zu tun, dass hier nshipster.com/launch-arguments-and-environment-variables es ist ziemlich einfach 🙂
InformationsquelleAutor onmyway133
Wenn Ihr backend verwendet eine sichere Verbindung ant erhalten Sie mit NSURLSession
müssen Sie überprüfen Sie Ihre server-Konfiguration und insbesondere die ATS-version und SSL-Zertifikat Info:
Statt nur so dass Unsichere Verbindung durch Einstellung
NSExceptionAllowsInsecureHTTPLoads = YES
, stattdessen müssen Sie Ermöglichen Abgesenkt Sicherheit falls Ihr server erfüllen nicht die min Anforderung (v1.2) ATS (oder besser zur Behebung der server-Seite).Gesenkt, so dass die Sicherheit auf einem Einzigen Server
openssl-client zu untersuchen, Zertifikat und erhalten Sie Ihre server-Konfiguration mit dem openssl-client :
..finden Sie am Ende
App-Transport-Security (ATS) erfordern Transport Layer Security (TLS) protocol version 1.2.
Anforderungen für die Verbindung Mit ATS:
Update: es stellt sich heraus, dass openssl nur die minimale protocol version Protocol : TLSv1 links
bleibt die Frage, ist es möglich zu interpretieren openssl-info, um herauszufinden, ob der server erfüllt die Anforderung. Auch Protocol : TLSv1 kann der makor-version anstelle von 1.x
Ich mache es generell, bei Verwendung von port
Die Antwort lässt mehr Fragen offen als beantwortet. Es scheint ein Problem kann werden die Zuordnungen zwischen dem, was openssl-Berichte und die Apple-Dokumentation. Es ist nicht möglich, aus dem openssl-Ausgang, um zu bestimmen, wenn TLS 1.2 unterstützt. Die Antwort auch nicht möglich zu bestimmen, ob Perfect Forward Secrecy wird unterstützt.
InformationsquelleAutor Idali
Nach zwei Tagen der versuche und Fehlschläge, was für mich gearbeitet ist dieser code von womble
mit Einer änderung, nach dieser post wir sollten aufhören, mit sub-Schlüssel mit dem NSExceptionDomains Wörterbuch diese Art von Konvention
Und verwenden Sie das neue übereinkommen
statt.
apple-Dokumentation
mein code
InformationsquelleAutor yehoni amran
Ein weiteres nützliches tool ist nmap (brew install nmap)
Gibt Ausgabe
InformationsquelleAutor Ryan Heitner
Dieser Fehler war, zeigt sich in den Protokollen manchmal, wenn ich mit einem buggy/crashy Cordova iOS-version. Es ging Weg, wenn ich ein Upgrade oder Downgrade cordova-iOS.
Dem server war ich den Anschluss, wurde mit TLSv1.2 SSL, so dass ich wusste, dass war nicht das problem.
InformationsquelleAutor im3r3k
In Ihrem Projekt
.plist
Datei hinzufügen diese Berechtigung :InformationsquelleAutor Hiren Dhamecha
Die syntax für die Info.plist-Konfiguration
InformationsquelleAutor ALOK KUMAR
Aktualisierte Antwort (post-WWDC 2016):
App-Transport-Sicherheit, - oder ATS, ist ein feature, dass Apple hat in iOS 9. Bei der ATS aktiviert ist, zwingt es eine app, um eine Verbindung zu web-services über eine HTTPS-Verbindung eher als nicht sichere HTTP.
Können Entwickler aber noch wechseln ATS aus und lassen Sie Ihre apps zum senden von Daten über eine HTTP-Verbindung wie in den oben genannten Antworten. Ende 2016 wird Apple machen ATS zwingend für alle Entwickler, die Hoffnung zu übermitteln, die Ihre apps im App Store. link
InformationsquelleAutor Paraneetharan Saravanaperumal
Dem Gerät, das ich getestet hatte die falsche Zeit eingestellt. Also, wenn ich versuchte Zugriff auf eine Seite mit einem Zertifikat, das würde bald ablaufen, es würde den Zugriff verweigern, weil das Gerät, wenn das Zertifikat abgelaufen war. Zu beheben, legen Sie die richtige Uhrzeit auf dem Gerät!
InformationsquelleAutor Warpzit
info.plist als unten oder einfach nur copy & Vergangenheit, die für mich arbeiten bis zu iOS 9.2
InformationsquelleAutor matinict