我们有一个iOS应用程序通过HTTPS连接到我们的服务器。当使用新的iOS 9 SDK构建应用程序并在iOS 9下运行时,会出现以下错误:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
该应用程序使用带有固定证书的AFNetworking 1.3.4。如果我使用其IP地址连接到服务器,则会出现此问题。如果我添加NSAllowsArbitraryLoads配置,或者如果我使用其域名连接到服务器,它就可以工作。
Tomcat连接器配置了sslEnabledProtocols =" TLSv1,TLSv1.1,TLSv1.2"。
我尝试了overriding the host name,但它似乎没有改变任何东西。
我还无法找到关于ATS的官方文档。也许连接IP地址不起作用?
答案 0 :(得分:29)
iOS9要求服务器仅支持TLSv1.2并支持完美的前向安全性。
还需要应用程序支持IPV6,包括不使用硬编码的IP地址。建议使用NSURLSession
。否则,必须在app plist中添加异常。
请参阅WWDC-15会话“安全性和您的应用”。
另请参阅Steven Peterson's Blog了解详情。
答案 1 :(得分:5)
您可以在“ Info.plist ”文件中添加此文件,它将允许非安全连接:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
答案 2 :(得分:3)
我发现了另一个堆栈溢出答案,其中包含服务器上确切新要求的清单,以完全满足iOS 9默认的App Transport Security要求: iOS 9 Security Server requirements Checklist
希望有所帮助。
答案 3 :(得分:2)
我暂时停留在这个问题上并尝试了Info.plist中的所有技巧,但仍然有错误:
HTTP load failed (kCFStreamErrorDomainSSL, -9813)
尝试连接到开发中的localhost服务器时。
使用与本机项目连接的本地项目进行本地开发使用自签名证书服务我让我的系统设置为信任证书但我花了一段时间才意识到我还需要IOS模拟器接受我的证书作为可信任过了这个错误。
在模拟器的主屏幕中,您应该能够将cert文件拖到模拟器中以提示它添加证书配置文件。 或者,如果证书可以通过模拟器的safari浏览器中的localhost url访问,您可以通过safari接受它。
希望这可以帮助某人,因为我在点击之前绕圈子去了!
答案 4 :(得分:1)
解决方案1:
如果您正在寻找work around
,请使用以下方法:
您的Info.plist文件应如下所示:
但是,建议不要使用此方法,因为它允许所有不安全的连接。
解决方案2:
SSL certificate that you apply on Server should be of type TLSv2.0 minimum since iOS 10 requires this.
请查看此link了解详细信息。