Xcode的9 - 11的iOS:NSURLConnection的 - sendAsynchronousRequest失败

问题描述:

我刚刚下载了最新版本的Xcode(9.0测试版(9M136h))。Xcode的9 - 11的iOS:NSURLConnection的 - sendAsynchronousRequest失败

然而,当我试图在iOS的11模拟器到我的服务器提出请求(使用NSURLConnection的sendAsynchronousRequest),收到错误:

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

NSError对象包含消息 - @“NSLocalizedDescription”:@“此服务器的证书无效,您可能连接到假装为”***“的服务器,把你的机密信息置于危险之中。“

plist中包含:

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

所以它不是在这种情况下(我猜)

不用说,它在iOS的10/9/8

工作问题有什么建议么?

在此先感谢!

+0

解决这个问题? –

+1

@ChrisVanBuskirk不完全。我向我们那个说过这可能与已过期的证书有关的严重人士伸出援手。看起来像在iOS 11中,他们强调整个安全问题。至于现在我在URLSession委托的didReceive挑战中使用completionHandler(.useCredential,URLCredential(trust:challenge.protectionSpace.serverTrust)),只是为了使其工作。 – dor506

+0

@ dor506你可以请你出示你的修补程序吗?我一直在为此工作9个小时,并且我可以帮助我获得atm。我第一次在obj c中编码。 – ODelibalta

对于所有在iOS 11中遇到此错误的人,请确保您的服务器上的有效(安全)证书工作正常。

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

一旦我们的服务器家伙集成新的有效证书,这个问题已经没有了。

一种方法来检查,如果该证书被固定,是过去在浏览器中有问题的链接。

其结果是,你可能会看到,连接不可靠:

enter image description here

+0

我很欣赏这个更新,但是这并不适用于我。 Chrome浏览器在我的iOS 11测试手机上使用URL以及Safari浏览器可以正常工作 – ODelibalta

你需要让你的应用程序运行的HTTP(无S)连接。默认情况下,苹果只允许HTTPS:

  1. 去你的info.plist

    here

  2. 然后按其中任何的加号图标
  3. 搜索“应用交通运输安全设置” here
  4. 点击左边的小箭头,找到“允许任意加载”,默认情况下它被设置为“NO”将其改为“YES”
+2

根据Security.SE和Crypto.SE的信息,您会因为安全实践不佳而被指责。 – DannyNiu

+0

可能是,但它是他的问题的解决方案 – Carter4502

+0

它不是解决方案,例如我有HTTP请求,我已经设置允许任意加载为YES,但无论如何,我有相同的错误:任务。 已完成,出错代码:-999 – Genevios

既然你已经有了一个无效的证书错误,我会根据我个人的安全做法提出以下建议。

如果你仍然在与CA的服务条款,要求他们发出新的有效证书给你。

检查您的钥匙串设置,并确保没有CA证书丢失。

或者,您可以为测试目的颁发自己的自签名证书,并将其作为信任锚点添加到本地Keychain中。搜索“如何创建自签名x509证书”将返回您可能会觉得有用的内容。