kCFStreamErrorDomainSSL,当通过iOS 9中的HTTPS通过IP地址连接到服务器时为-9802

我们有一个iOS应用程序,通过HTTPS连接到我们的服务器。 当应用程序使用新的iOS 9 SDK构build并在iOS 9下运行时,会发生以下错误:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) 

该应用程序使用AFNetworking 1.3.4与固定的证书。 如果我使用其IP地址连接到服务器,则会出现问题。 它可以工作,如果我添加NSAllowsArbitraryLoadsconfiguration,或者如果我连接到服务器的域名。

Tomcat连接器configuration了sslEnabledProtocols =“TLSv1,TLSv1.1,TLSv1.2”。

我试图覆盖主机名,但似乎并没有改变任何东西。

我还找不到很多有关ATS的正式文件。 也许连接IP地址不应该工作?

iOS9要求服务器只支持TLSv1.2并支持完善的前向安全性。

还需要为应用程序支持IPV6,包括不使用硬编码的IP地址。 build议使用NSURLSession 。 否则,必须在应用程序plist中添加exception。

请参阅WWDC-15会议“安全和您的应用程序”。

详情请参阅Steven Peterson的博客 。

您可以将其添加到“ Info.plist ”文件中,它将允许非安全连接:

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

我发现另一个堆栈溢出的答案与服务器上的确切的新要求的清单,以充分满足iOS 9的默认应用程序传输安全要求: iOS 9安全服务器要求清单

希望有所帮助。

我被困在这一段时间,并尝试Info.plist中的所有技巧,但仍然有错误:

 HTTP load failed (kCFStreamErrorDomainSSL, -9813) 

当试图连接到开发中的本地主机服务器。

使用原生项目进行本地开发,连接到使用自签名证书的API我已经将系统设置为信任证书,但是我花了一段时间才意识到我还需要IOS模拟器来接受我的证书作为可信这个错误。

在模拟器的主屏幕中,您应该能够将证书文件拖放到模拟器中,以提示它添加证书configuration文件。 或者,如果证书可以通过模拟器Safari浏览器中的本地主机url进行访问,则可以通过Safari浏览器接受。

希望这可以帮助一个人,因为我点击了我之前圈了一圈!

解决scheme1:

如果你正在寻找work around方法work around然后使用下面的方法:

  1. 添加值为true的 布尔types的NSAllowsArbitraryLoads键。

你的Info.plist文件应该是这样的:

截图1

但是, 不build议使用这种方法,因为它允许所有不安全的连接。

解决scheme2:

SSL certificate that you apply on Server should be of type TLSv2.0 minimum since iOS 10 requires this.SSL certificate that you apply on Server should be of type TLSv2.0 minimum since iOS 10 requires this. 检查此链接的细节。

  1. 添加值为true的 布尔types的NSIncludesSubdomains
  2. 添加NSTemporaryExceptionAllowsInsecureHTTPLoadstypes为布尔值的键值为true
  3. 添加值为TLSv1.2的 Stringtypes的NSTemporaryExceptionMinimumTLSVersion项

你的Info.plist文件应该是这样的:

截图2