2016-03-30 13 views
1

私のプロジェクトはXcode 7.3で動作しています。Xcode 7.3:NSURLSession/NSURLConnection HTTPロードに失敗しました(kCFStreamErrorDomainSSL、-9802)

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

エラーメッセージ:私はちょうどiはタイトルや情報としてエラーを得た要求プレゼント

The certificate for this server is invalid. You might be connecting to a >server that is pretending to be “ https://api.domain.com ” which >could put your confidential information at risk.

https://api.domain.com:9002

私は解決策を検索しますがなし。 するinfo.plistにこれらを追加

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

OR (私の現在の設定)

<key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSAllowsArbitraryLoads</key> 
     <true/> 
     <key>NSExceptionDomains</key> 
     <dict> 
      <key>https://api.domain.com:9002</key> 
      <dict> 
       <key>NSIncludesSubdomains</key> 
       <true/> 
       <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> 
       <false/> 
      </dict> 
     </dict> 
    </dict> 

私が検索:

https://stackoverflow.com/a/32912578/291240

https://stackoverflow.com/a/36209583/291240

https://stackoverflow.com/a/34999957/291240

+0

GETメソッドまたはすべての要求の呼び出しでのみ発生します。 –

+0

GETとPOSTの両方が同じエラーです。 –

+0

これは参考になる可能性があります[この投稿を参照](http://stackoverflow.com/questions/23241872/nsurlconnection-cfurlconnection-http-load-failed-kcfstreamerrordomainssl-9813)ありがとう。 –

答えて

1

サーバーで使用されるSSL証明書が無効である、またはあなたのサーバーは、すべてのHTTPSではありません。 //代わりにします。https:

HTTPを使用して接続してみてください//

PS:私は、私のブラウザでこのリンクを開くことができないのですhttps://api.domain.com:9002

が、これはプレースホルダされている可能性が、だからこれを試してください。

しかし、そうでない場合は、エラーを無視することが可能な方法もあります:

WARNING - これはまたのMITM攻撃にあなたのコードが脆弱になるだろう、だから、最高これは、サーバー

上のSSLを修正することですが

は自己としてあなたNSURLConnectionのデリゲートを設定し、NSURLSESSIONチェックこの回答のコード

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace { 
    return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { 
    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) 
    if ([trustedHosts containsObject:challenge.protectionSpace.host]) 
     [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; 

    [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge]; 
} 

の下に追加NSURLSession Delegate

上記のコード

UPDATE

安全な方法については、このSSL Pinning for NSURLSessionをチェックしてください、のMITM攻撃に対して脆弱になります。

+0

ありがとう。それはhttpsです。しかし、SSLは無効です。私はそれらをエスケープしたい。しかし、あなたのメソッドは、NSURLConnection、IOS 6以上に適しているようですが、私はNSURLSessionを使用したい、これに関する助言? –

+0

私の答え、PLZチェック –

+0

ありがとう!できます!しかし、もう一つの問題は開発のためだけです。あなたがこれを提出すれば、Appleはそれを拒否しますか? –

関連する問題