23

我们有一个 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"。

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

我还找不到太多关于 ATS 的官方文档。也许用IP地址连接不应该工作?

4

5 回答 5

29

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

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

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

另请参阅Steven Peterson 的博客了解详细信息。

于 2015-06-11T11:13:33.887 回答
5

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

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
于 2015-10-27T06:32:30.097 回答
3

我找到了另一个堆栈溢出答案,其中包含对服务器的确切新要求清单,以完全满足 iOS 9 默认应用程序传输安全要求: iOS 9 安全服务器要求清单

希望有帮助。

于 2015-08-20T10:25:38.330 回答
2

我在这个问题上停留了一段时间,尝试了 Info.plist 中的所有技巧,但仍然出现错误:

HTTP load failed (kCFStreamErrorDomainSSL, -9813)

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

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

在模拟器的主屏幕中,您应该能够将证书文件拖到模拟器中以提示它添加证书配置文件。或者,如果可以通过模拟器的 safari 浏览器中的 localhost url 访问证书,则您可以通过 safari 接受它。

希望这可以帮助我在点击之前转圈圈的人!

于 2016-09-23T11:28:58.507 回答
1

解决方案 1:

如果您正在寻找,请work around使用以下方法:

  1. 添加布尔类型的NSAllowsArbitraryLoads键,值为true

您的 Info.plist 文件应如下所示:

截图 1

但是,不推荐这种方法,因为它允许所有不安全的连接。

解决方案 2:

SSL certificate that you apply on Server should be of type TLSv2.0 minimum since iOS 10 requires this. 检查此链接以获取详细信息。

  1. 添加布尔类型的NSIncludesSubdomains键,值为true
  2. 添加布尔类型的NSTemporaryExceptionAllowsInsecureHTTPLoads键,值为true
  3. 添加值为TLSv1.2的String类型的NSTemporaryExceptionMinimumTLSVersion键

您的 Info.plist 文件应如下所示:

截图 2

于 2017-07-25T09:37:13.010 回答