我的项目在Xcode 7.3上运行。
当我发出 GET 请求时,我收到错误标题和信息:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
错误消息:
此服务器的证书无效。您可能正在连接到假装为“https://api.domain.com”的>服务器,该服务器可能会使您的机密信息面临风险。
我搜索解决方案但没有效果。将这些添加到 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
答案 0 :(得分:1)
您的服务器使用的SSL证书无效,或者您的服务器根本不是https。
请尝试使用http://而不是https://
进行连接PS:我无法在浏览器https://api.domain.com:9002
中打开此链接但这可能是一个占位符,所以请试试这个。
但除此之外,还有一种方法可以忽略错误:
警告 - 这也会使您的代码容易受到MitM攻击,因此最好是在服务器上修复您的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];
}
FOR NSURLSESSION查看此答案,NSURLSession Delegate
<强>更新强>
以上代码容易受到MitM攻击,
请检查此SSL Pinning for NSURLSession,以获得安全的方式。