Ios 子域上的NSURLSession/NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9802)?

Ios 子域上的NSURLSession/NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9802)?,ios,swift,ios9,Ios,Swift,Ios9,我们的应用程序在生产和开发环境中都运行良好,但在登台环境中,我们会遇到常见错误: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) 据我所知,当您尝试连接到非httpsURL时,会发生此错误 我们使用ngrok作为我们的本地隧道,它有一个httpsurl,运行良好 对于生产,我们也使用https://ourdomain.com而且工作正常 对于分段,我们使用https://stagin

我们的应用程序在生产和开发环境中都运行良好,但在登台环境中,我们会遇到常见错误:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
据我所知,当您尝试连接到非
https
URL时,会发生此错误

  • 我们使用ngrok作为我们的本地隧道,它有一个
    https
    url,运行良好
  • 对于生产,我们也使用
    https://ourdomain.com
    而且工作正常
  • 对于分段,我们使用
    https://staging.ourdomain.com
    ,则会发生错误
我看到许多解决方案都说明了这一点:

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

应用程序传输安全不仅仅是HTTP与HTTPS。您需要使用正确配置的服务器+证书来避免ATS问题。来自苹果文档[1]:

服务器必须至少支持传输层安全性(TLS) 协议版本1.2。连接密码仅限于 提供前向保密。证书必须使用SHA256或 更大的签名哈希算法,2048位或更大 RSA密钥或256位或更高的椭圆曲线(ECC)密钥。无效的 证书会导致硬故障和无连接

如果您使用的是OS X 10.11(或更高版本),则可以使用nscurl进行故障排除。弹出打开终端并运行以下操作:

/usr/bin/nscurl --ats-diagnostics https://staging.ourdomain.com

[1]

您能将nscurl的输出粘贴进来让我们看看吗?当您在使用“-verbose”开关时,可能需要添加该开关。嗯……第一次通过的测试——“默认ATS安全连接”——应该表明您的服务器配置正确;您不应该遇到ATS问题。话虽如此,我想nscurl可能不是一个充分的测试。如果不是,我会很惊讶,但这是可能的。您可以尝试SSL实验室站点来检查您的暂存服务器吗?它的输出将更全面地说明服务器的配置方式。另外,您是否尝试过NSAllowArbitraryLoads密钥,它是否解决了问题?我没有尝试过任意加载。我已经向我的经理提出了这个解决方案,但他不喜欢回避问题的想法,即使是在分期阶段。我同意你的经理的观点。但是,为了解决这个问题,我建议您进行更改,打开NSAllowArbitraryLoads,看看它是否有效。之后可以立即恢复更改。如果它起作用,那么您就有ATS问题。如果它不起作用,那么你就没有ATS问题。nscurl的结果表明您没有ATS问题。您找到解决方案了吗?我还运行了
nscurl
,所有测试都通过了。
/usr/bin/nscurl --ats-diagnostics https://staging.ourdomain.com