Hat jemand mit iOS 9 Beta 1 dieses Problem gehabt?
Ich verwende Standard-NSURLConnection, um eine Verbindung zu einem Webservice herzustellen, und sobald der Webservice aufgerufen wird, wird der folgende Fehler angezeigt. Dies funktioniert derzeit in iOS 8.3
Möglicher Beta-Bug? Ideen oder Gedanken wären toll! Ich weiß, dass es sehr früh in der iOS 9-Entwicklung ist
Hier ist der vollständige Fehler:
CFNetwork SSLHandshake fehlgeschlagen (-9824) HTTP-Laden von NSURLSession / NSURLConnection 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];
quelle
In iOS 10+ MUSS die TLS-Zeichenfolge die Form "TLSv1.0" haben. Es kann nicht einfach "1.0" sein. (Seufzer)
Die folgende Kombination der anderen Antworten funktioniert.
Angenommen, Sie versuchen, eine Verbindung zu einem Host (YOUR_HOST.COM) herzustellen, der nur TLS 1.0 enthält.
Fügen Sie diese zur Info.plist Ihrer App hinzu
quelle
NSTemporaryExceptionRequiresForwardSecrecy
den Trick für mich getan hat, danke!Weitere Informationen Konfigurieren von Sicherheitsausnahmen für den App-Transport in iOS 9 und OSX 10.11
Dieser Versand einer App mit App Transport Security enthält einige gute Debugging-Tipps
ATS-Fehler
CFNETWORK_DIAGNOSTICS
nscurl
quelle
Wenn Ihr Backend eine sichere Verbindung verwendet, verwenden Sie NSURLSession
Sie müssen Ihre Serverkonfiguration überprüfen, um Informationen zur ATS-Version und zum SSL-Zertifikat zu erhalten:
Anstatt nur eine unsichere Verbindung durch Festlegen zuzulassen
NSExceptionAllowsInsecureHTTPLoads = YES
, müssen Sie stattdessen eine verminderte Sicherheit zulassen, falls Ihr Server die Mindestanforderungen (v1.2) für ATS nicht erfüllt (oder besser, um die Serverseite zu reparieren).Verringerte Sicherheit für einen einzelnen Server zulassen
Verwenden Sie den openssl-Client, um das Zertifikat zu untersuchen und Ihre Serverkonfiguration mithilfe des openssl-Clients abzurufen:
..find am Ende
Für App Transport Security (ATS) ist das TLS-Protokoll (Transport Layer Security) Version 1.2 erforderlich.
Voraussetzungen für die Verbindung mit ATS:
Update: Es stellt sich heraus, dass openssl nur die minimale Protokollversion bereitstellt. Protokoll: TLSv1- Links
quelle
Nach zwei Tagen voller Versuche und Misserfolge hat dieser Code von für mich funktioniert voller Womble- funktioniert
Mit einer Änderung sollten wir gemäß diesem Beitrag die Verwendung von Unterschlüsseln einstellen, die dem NSExceptionDomains- Wörterbuch dieser Art von Konvention zugeordnet sind
Und verwenden Sie auf der neuen Konvention
stattdessen.
Apfeldokumentation
mein Code
quelle
Ein weiteres nützliches Tool ist nmap (Brew Install nmap)
Gibt Ausgabe
quelle
Dieser Fehler wurde manchmal in den Protokollen angezeigt, wenn ich eine fehlerhafte / abstürzende Cordova iOS-Version verwendete. Es ging weg, als ich Cordova iOS aktualisierte oder herunterstufte.
Der Server, zu dem ich eine Verbindung herstellte, verwendete TLSv1.2 SSL, sodass ich wusste, dass dies nicht das Problem war.
quelle
Fügen Sie in Ihrer Projektdatei
.plist
diese Berechtigung hinzu:quelle
Die Syntax für die Info.plist-Konfiguration
quelle
Aktualisierte Antwort (nach WWDC 2016):
App Transport Security (ATS) ist eine Funktion, die Apple in iOS 9 eingeführt hat. Wenn ATS aktiviert ist, wird eine App gezwungen, über eine HTTPS-Verbindung eine Verbindung zu Webdiensten herzustellen, anstatt über nicht sicheres HTTP.
Entwickler können ATS jedoch weiterhin ausschalten und ihren Apps erlauben, Daten über eine HTTP-Verbindung zu senden, wie in den obigen Antworten erwähnt. Ende 2016 wird Apple ATS für alle Entwickler verbindlich machen , die hoffen, ihre Apps im App Store einzureichen. Verknüpfung
quelle
Das Gerät, bei dem ich getestet habe, hatte eine falsche Zeit eingestellt. Wenn ich also versuchte, auf eine Seite mit einem Zertifikat zuzugreifen, das bald leer sein würde, wurde der Zugriff verweigert, da das Gerät, obwohl das Zertifikat abgelaufen war. Stellen Sie zum Beheben die richtige Zeit am Gerät ein!
quelle