Xcode 7.3:NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9802)
Posted
技术标签:
【中文标题】Xcode 7.3:NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9802)【英文标题】:Xcode 7.3: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) 【发布时间】:2016-03-30 05:17:14 【问题描述】:我的项目在 Xcode 7.3 上运行。
当我只是发出 GET 请求时,我得到了错误作为标题和信息:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
错误信息:
此服务器的证书无效。您可能正在连接到一个伪装成“https://api.domain.com”的>服务器,这可能会使您的机密信息面临风险。
https://api.domain.com:9002
我搜索了解决方案,但没有一个有效。将这些添加到 info.plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
或 (我目前的设置)
<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://***.com/a/32912578/291240
https://***.com/a/36209583/291240
https://***.com/a/34999957/291240
【问题讨论】:
只发生在 GET 方法或所有请求调用中。 GET 和 POST 一样的错误。 参考this post 可能会有帮助。 【参考方案1】:您的服务器使用的 SSL 证书无效,或者您的服务器根本不是 https。
请尝试使用 http:// 而不是 https:// 进行连接
PS:我无法在浏览器中打开此链接,https://api.domain.com:9002
但这可能是一个占位符,所以请试试这个。
但除此之外,还有一种方法可以忽略错误:
警告 - 这也会使您的代码容易受到中间人攻击,所以最好是在服务器上修复您的 SSL
将您的 NSURLConnection 委托设置为 self 并添加以下代码
- (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 检查这个答案,NSURLSession Delegate
更新
以上代码容易受到中间人攻击,
请检查此SSL Pinning for NSURLSession,以获得安全的方式。
【讨论】:
谢谢。这是https。但是ssl无效。我想逃离他们。但是您的方法似乎适用于 NSURLConnection,这对 ios 6 及更高版本有好处,我想使用 NSURLSession,对此有何帮助? 谢谢!有用!但另一个问题是,这只是为了开发,如果你提交,Apple会拒绝它吗? 是的,他们可能会。请检查此安全方法。 jonflanders.com/?p=1415。还更新了我的答案。以上是关于Xcode 7.3:NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9802)的主要内容,如果未能解决你的问题,请参考以下文章