xCode 9 - iOS 11: NSURLConnection - sendAsynchronousRequest 失败

xCode 9 - iOS 11: NSURLConnection - sendAsynchronousRequest fails

我刚刚下载了最新版本的 xCode (9.0 beta (9M136h))。

但是,当我尝试在 iOS 11 模拟器中向我的服务器发出请求时(使用 NSURLConnection sendAsynchronousRequest),收到一个错误:

NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9807) NSURLConnection 完成错误 - 代码 -1202

NSError 对象包含消息 - @"NSLocalizedDescription" : @"The certificate for this server is invalid. You might be connecting to a server that is pretending to be “***” which could put your confidential information at risk."

plist 包含:

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

所以这不是本例的问题(我猜)

不用说它在iOS 10/9/8

有什么建议吗?

提前致谢!

对于在 iOS11 中遇到此错误的所有人,请确保您使用的是服务器中的有效(安全)证书。

在我们的案例中,证书不够严格。

一旦我们的服务器人员集成了新的有效证书,问题就解决了。

检查证书是否安全的一种方法是在浏览器中跳过有问题的 link。

因此,您可能会看到连接不安全:

您需要允许您的应用程序 运行 HTTP(无 S)连接。默认情况下,Apple 仅允许 HTTPS:

  1. 转到您的 info.plist

    here

  2. 然后按任意一个上的加号图标

  3. 搜索“应用程序传输安全设置” here

  4. 点击左边的小箭头,找到“允许任意加载”,默认设置为“否”,将其改为“是”

由于您遇到了无效证书错误,我将根据我个人的安全实践提出以下建议。

如果您与 CA 的服务条款仍然有效,请要求他们为您颁发新的有效证书。

检查您的钥匙串设置并确保没有遗漏任何 CA 证书。

或者,您可以出于测试目的颁发自己的自签名证书,并将其作为信任锚添加到本地钥匙串中。搜索 "how to create self-signed x509 certificate" 会 return 一些你可能会觉得有用的东西。