2016-06-18 15 views
0

Ich habe ein Problem, das kürzlich aufgetreten ist.ios9 HTTP-Ladevorgang fehlgeschlagen kCFStreamErrorDomainSSL (-9802)

In meinem Code, ich ein paar Bilder von einem HTTP-Server laden:

let urlPicture = "http://images.mydomain.com/" + self.currentUser.pic 
imageView.sd_setImageWithURL(NSURL(string: urlPicture)) 

ich für meine Bilder Server nicht HTTPS verwenden, weil ich denke, es ist zu langsam gewesen wäre, aber vielleicht falsch auf ich bin dieser Punkt. Ein Nodejs-Server wird in einer AWS EC2-Instanz ausgeführt und überwacht Port 80, um Bilder zu verwalten.

Aufgrund ATS Einschränkungen erkläre ich Sub-Domain eine Ausnahme in meiner Info.plist-Datei für meine Bilder:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>images.mydomain.com</key> 
     <dict> 
      <key>NSExceptionAllowsInsecureHTTPLoads</key> 
      <true/> 
      <key>NSExceptionMinimumTLSVersion</key> 
      <string>TLSv1.2</string> 
      <key>NSExceptionRequiresForwardSecrecy</key> 
      <true/> 
      <key>NSIncludesSubdomains</key> 
      <true/> 
      <key>NSRequiresCertificateTransparency</key> 
      <false/> 
      <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> 
      <false/> 
      <key>NSThirdPartyExceptionMinimumTLSVersion</key> 
      <string>TLSv1.2</string> 
      <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> 
      <true/> 
     </dict> 
    </dict> 
</dict> 

Vor kurzem habe ich eine neue Sub-Domain auf dem gleichen AWS Beispiel: https://api.mydomain.com Weitere NodeJS Server hört auf Port 443 und verwaltet die API.

Seit dieser Änderung ist alles in meiner app gut, wenn ich die API aufrufen, aber wenn ich Bilder laden ich folgendes Problem bin vor:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) 

Jede Idee fo das in Ordnung bringen?

Antwort

0

Ich habe das Problem gefunden.

Es ist auf Server-Seite war, der HTTPS-Server auf der gleichen AWS-Instanz läuft mit HSTS konfiguriert:

var ONE_YEAR = 31536000000; 
app.use(helmet.hsts({ 
    maxAge: ONE_YEAR, 
    includeSubdomains: true, 
    force: true 
})); 

Die Variablen includeSubdomains Satz true Kräfte meiner andere Domäne images.mydomain.com HTTPS-Protokoll zu verwenden, während es sich um einen HTTP-Server.

es zu lösen, nur andere Domänen in HSTS Konfiguration ausschließen:

var ONE_YEAR = 31536000000; 
app.use(helmet.hsts({ 
    maxAge: ONE_YEAR, 
    includeSubdomains: false, 
    force: true 
})); 
-2

Können Sie dies in Plist hinzufügen.

<key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSAllowsArbitraryLoads</key> 
     <true/> 
    </dict> 
+0

Die Anwendung wird in Appstor veröffentlicht, so kann ich alle ATS nicht deaktivieren. Das ist der Grund, warum ich nur eine Ausnahme für meine Bilder Subdomain gemacht habe. – Thomi

+0

Ich habe Ihren Vorschlag hinzugefügt, das Problem ist das gleiche. Ich denke, dass iOS für meine Anfrage automatisch HTTP zu HTTPS ändert. Irgendeine Idee, dieses Verhalten zu vermeiden? – Thomi

+1

Ein weiterer Punkt, das Problem tritt nicht mit dem Xcode-Simulator auf, sondern nur mit einem echten Gerät. – Thomi

Verwandte Themen