2015-08-25 11 views
14

In iOS 9, ich bin eine Anfrage für die URL https://s3.amazonaws.com/furniture.retailcatalog.us/products/2061/6262u9665.jpg mit grundlegenden NSURLConnection.NSURLSession/NSURLConnection HTTP laden fehlgeschlagen (kCFStreamErrorDomainSSL, -9802) Fehler in https Verbindung

NSOperationQueue *completionQueue = [NSOperationQueue mainQueue]; 
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    self.mURLSession = [NSURLSession sessionWithConfiguration:configuration delegate:nil delegateQueue:completionQueue]; 

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://s3.amazonaws.com/furniture.retailcatalog.us/products/2061/6262u9665.jpg"]]; 
    NSURLSessionDataTask *dataTask = [self.mURLSession dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
     NSLog(@"%@",error); 
    }]; 
    [dataTask resume]; 

Aber immer diese Fehlermeldung

Fehler Domain = NSURLErrorDomain-Code = -1200 "Ein SSL-Fehler aufgetreten ist und eine sichere Verbindung zum Server kann nicht hergestellt werden." UserInfo = {NSLocalizedDescription = Ein SSL-Fehler ist aufgetreten und eine sichere Verbindung zum Server kann nicht hergestellt werden., NSLocalizedRecoverySuggestion = Möchten Sie sich trotzdem mit dem Server verbinden ?, _kCFStreamErrorDomainKey = 3, NSUnderlyingError = 0x7c1075e0 {Fehler-Domäne = kCFErrorDomainCFNetwork Code = - 1200 "(null)" Userinfo = {_ kCFStreamPropertySSLClientCertificateState = 0, _kCFNetworkCFStreamSSLErrorOriginalValue = -9802, -9802 = _kCFStreamErrorCodeKey, _kCFStreamErrorDomainKey = 3, = kCFStreamPropertySSLPeerTrust, kCFStreamPropertySSLPeerCertificates = {type = unveränderlich, count = 3, WERTE = ( 0: 1: 2: )}}}, _kCFStreamErrorCodeKey = -9802, NSErrorFailingURLStringKey = https://s3.amazonaws.com/furniture.retailcatalog.us/products/2061/6262u9665.jpg, NSErrorPeerCertificateChainKey = {type = unveränderlich, count = 3, WERTE = ( 0: 1: 2: )}, NSErrorClientCertificateStateKey = 0, NSURLErrorFailingURLPeerTrustErrorKey =, NSErrorFailingURLKey = https://s3.amazonaws.com/furniture.retailcatalog.us/products/2061/6262u9665.jpg}

Auch wenn diese https-Verbindung, warum ich diesen seltsamen Fehler bekommen bin. Kann mir bitte jemand Bescheid geben.

+0

Ich bin nicht zu gut informiert Ich glaube, dass HTTPS unter iOS 9 nicht ausreicht - Ihre Verbindung muss auch mindestens TLS 1.2 verwenden.Sie können googlen und einen Dienst finden, der Ihnen sagt, ob Sie diesen für diesen Server aktiviert haben. Das war der Grund für diesen Fehler, als ich es vor einiger Zeit gesehen habe. –

Antwort

27

Gemäß Apple tech note erfordert App Transport Security SHA-2. Die S3- (und CloudFront-) Zertifikate verwenden SHA-1, weshalb dieser Fehler auftritt.

Die Problemumgehung besteht darin, NSExceptionRequiresForwardSecrecy auf false zu setzen. (Dies ist so lange, bis AWS zu SHA-2 (by September 30th, 2015) wechselt).

SHA-1 Signature

+0

funktioniert immer noch kein anderer Vorschlag? –

+0

Erhalte diesen Fehler: App-Transport-Sicherheit hat eine Klartext-HTTP-Belastung (http: //) blockiert, da sie unsicher ist. Temporäre Ausnahmen können über die Info.plist-Datei Ihrer App konfiguriert werden. –

+0

Fügen Sie eine Ausnahmedomäne unter "App-Transport-Sicherheitseinstellungen" in "info.plist" hinzu. –

6

Ich fand dies auch mit Amazon S3. Leider kann ich Ihnen nicht sagen, warum dies geschieht - S3 die Forward Secrecy Anforderungen (at least according to this answer) gerecht zu werden scheint:

 
Adams-MacBook-Pro:tmp Adam$ curl -kvI https://s3.amazonaws.com 
* Rebuilt URL to: https://s3.amazonaws.com/ 
* Trying 54.231.32.128... 
* Connected to s3.amazonaws.com (54.231.32.128) port 443 (#0) 
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 

Die Abhilfe, which I found here eine Ausnahme von der App ist Info.plist-Datei hinzufügen nicht Forward Secrecy erfordern:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>s3.amazonaws.com</key> 
     <dict> 
      <key>NSExceptionRequiresForwardSecrecy</key> 
      <false/> 
     </dict> 
    </dict> 
</dict> 

Soweit ich sagen kann, ist dies der Mindestbetrag ist, dass Sie reduzieren die integrierten Sicherheits um Amazon S3 zu verbinden.

2

Mit Hilfe von den anderen Antworten hier zur Verfügung gestellt und here, befestigte ich meine app, die mit diesem zusätzlich zu dem plist zu mehr cloudfront.net Subdomains verbinden muss:

 <key>NSAppTransportSecurity</key> 
     <dict> 
      <key>NSExceptionDomains</key> 
      <dict> 
       <key>cloudfront.net</key> 
        <dict> 
        <!--Include to allow subdomains--> 
        <key>NSIncludesSubdomains</key> 
        <true/> 
        <key>NSExceptionRequiresForwardSecrecy</key> 
        <false/> 
       </dict> 
      </dict> 
     </dict> 
0

Für mich war die Lösung, diese Ausnahme für die Domäne hinzuzufügen:

<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>xxx.com</key> 
     <dict> 
      <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> 
      <true/> 
     </dict> 
    </dict> 
</dict> 
Verwandte Themen