Wir haben eine iOS-App, die über HTTPS eine Verbindung zu unserem Server herstellt. Wenn die App mit dem neuen iOS 9 SDK erstellt und unter iOS 9 ausgeführt wird, tritt der folgende Fehler auf:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
Die App verwendet AFNetworking 1.3.4 mit angehefteten Zertifikaten. Das Problem tritt auf, wenn ich mit seiner IP-Adresse eine Verbindung zum Server herstelle. Es funktioniert, wenn ich die Konfiguration NSAllowsArbitraryLoads hinzufüge oder wenn ich eine Verbindung zum Server mit dem Domänennamen herstelle.
Der Tomcat-Connector ist mit sslEnabledProtocols = "TLSv1, TLSv1.1, TLSv1.2" konfiguriert.
Ich habe versucht den Hostnamen zu überschreiben , aber es scheint nichts zu ändern.
Ich kann noch nicht viel offizielle Dokumentation zu ATS finden. Vielleicht sollte die Verbindung mit der IP-Adresse nicht funktionieren?
iOS9 erfordert, dass der Server nur TLSv1.2 unterstützt und die perfekte Vorwärtssicherheit unterstützt.
Außerdem muss die App IPV6 unterstützen, einschließlich der Tatsache, dass keine fest codierten IP-Adressen verwendet werden. Empfohlen wird die Verwendung von NSURLSession
. Andernfalls müssen Ausnahmezusätze in der App-Liste vorgenommen werden.
Siehe die WWDC-15-Sitzung "Sicherheit und Ihre Apps".
Siehe auch Steven Petersons Blog für Details.
Sie können dies in Ihre "Info.plist" - Datei einfügen, damit nicht gesicherte Verbindungen hergestellt werden können:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Ich fand eine weitere Antwort auf einen Stapelüberlauf mit einer Checkliste der genauen neuen Anforderungen auf dem Server, um die Standardanforderungen für die App-Transport-Sicherheit in iOS 9 vollständig zu erfüllen: Checkliste für die Anforderungen an den iOS 9-Sicherheitsserver
Ich hoffe, das hilft.
Ich blieb eine Weile hängen und habe alle Tricks in Info.plist ausprobiert, hatte aber immer noch den Fehler:
HTTP load failed (kCFStreamErrorDomainSSL, -9813)
beim Versuch, eine Verbindung zu einem Localhost-Server in der Entwicklung herzustellen.
Lokale Entwicklung mit einem reaktiven nativen Projekt, das eine Verbindung zu einer API herstellt, die mit einem selbstsignierten Zertifikat ausgestattet ist. Ich hatte mein System so eingestellt, dass es dem Zertifikat vertraut, aber es dauerte eine Weile, bis mir klar wurde, dass ich auch den IOS Simulator benötigte mein Zertifikat als vertrauenswürdig zu akzeptieren, um diesen Fehler zu überwinden.
Auf dem Startbildschirm Ihres Simulators sollten Sie in der Lage sein, die Zertifikatsdatei in den Simulator zu ziehen, um ihn zum Hinzufügen des Zertifikatsprofils aufzufordern. Wenn das Zertifikat über eine Localhost-URL im Safari-Browser des Simulators zugänglich ist, können Sie es möglicherweise über Safari akzeptieren.
Hoffe, das hilft jemandem, als ich im Kreis herumging, bevor es für mich geklickt hat!
Lösung 1:
Wenn Sie nach work around
Suchen, gehen Sie wie folgt vor:
Ihre Info.plist-Datei sollte folgendermaßen aussehen:
Dieser Ansatz wird jedoch nicht empfohlen, da er alle unsicheren Verbindungen zulässt.
Lösung 2:
Der SSL certificate that you apply on Server should be of type TLSv2.0 minimum since iOS 10 requires this.
Check this link für Details.
Ihre Info.plist-Datei sollte folgendermaßen aussehen: