【问题标题】:App Transport Security blocks HTTPS应用传输安全阻止 HTTPS
【发布时间】:2018-04-17 01:43:11
【问题描述】:

我对 ATS 有疑问。 我正在使用 XCode 9.1,我的开发目标是 11.0。 我正在使用 react-native 0.49 进行开发

我的程序正在获取具有有效(谷歌浏览器)letencrypt 证书的 https (https://www.xxxx.com) 资源。 仅当 NSAllowsArbitraryLoads 设置为 true 时提取才有效,设置为 false 时提取被阻止(调试)?

我正在使用临时域 (https://xxxx.no-ip.org) 进行一些测试。这个域也有一个有效的letsencrypt证书。在这种情况下,一切正常。

我可以看到两个主机之间的唯一区别是测试域是单域主机,生产主机是多域主机。 有人建议吗?

问候,

哈利


调试出来: CFNetwork 诊断 [1:1187] 12:38:08.258 { 失败:(空) 加载程序:{url = https://.... 错误:错误域=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, _kCFNetworkCFStreamSSLErrorOriginalValue=-9802, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9802}

这是我的 info.plist 部分

<key>NSAppTransportSecurity</key>
  <dict>
  <key>NSAllowsArbitraryLoads</key>
  <false/>
  <key>NSExceptionDomains</key>
  <dict>
  <key>xxxx.no-ip.org</key>
  <dict/>
  <key>localhost</key>
  <dict>
  <key>NSExceptionAllowsInsecureHTTPLoads</key>
  <true/>
  </dict>
  <key>xxxx.com</key>
  <dict>
  <key>NSIncludesSubdomains</key>
  <true/>
</dict>  </dict>  </dict>

【问题讨论】:

  • 您如何知道 (https://www.xxxx.com) 上的证书有效? Letsencrypt 不颁发 *.example.com 证书——你确定你的证书是用于 www.xxxx.com,而不仅仅是 xxxx.com?
  • 我已经在 Chrome 和 Safari 中打开了 URL

标签: ios app-transport-security


【解决方案1】:

有时会发生这种情况,因为您的证书不符合 Apple 要求的 TLS 版本的所有要求。

尝试将此添加到域https://www.xxxx.com

<key>NSExceptionRequiresForwardSecrecy</key>
<true/>

别忘了包含子域:

<key>NSIncludesSubdomains</key>
<true/>

如果这没有帮助,那么您可以尝试查找您想要支持的最低 TLS 版本:

<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>

如果所有过去的都不起作用,请尝试添加:

<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>

【讨论】:

  • Thx Gabox,我已经玩过这些参数了 - 不幸的是没有成功。该证书是相当新的(带有 RSA 加密的 SHA-256),它与我的测试主机上的证书几乎相同。 Chrome 和 Safari 等所有主要浏览器都毫无困难地接受了证书 - 这很奇怪......
  • 很奇怪,所以如果这些都没有在您的域上工作,我会说该证书不符合 Apple 的要求。我已经看到域需要 ForwardSecrecy 的例外情况,这是常见的情况。
  • Safari 将接受证书,即使它不符合 ATS 要求。否则,一半的互联网将停止在 Safari 中运行。有很多网站不符合最低 ATS 要求(TLS 1.2+、前向保密、强密钥)。
【解决方案2】:

如果您尝试通过 HTTPS 连接,则使用 NSExceptionAllowsInsecureHTTPLoads 不应该做任何事情。您的 URL (https://www.xxxx.com) 是否有可能将流量重定向到 http://www.xxxx.com

还有其他会影响 HTTPS 流量的例外情况,允许 HTTPS 连接不满足 HTTPS 的所有要求(例如,前向保密、TLS 版本、密钥强度)。您需要做的是弄清楚它失败的确切原因。

要测试 URL 是否符合 ATS,请在 Mac 上使用 nscurl --ats-diagnostics &lt;url&gt; 命令。您可以在this post 中找到更多关于 ATS 的一般信息,以及如何使用/解释上述 nscurl 命令的结果。

此外,您可以通过提高您的CFNETWORK_DIAGNOSTICS 级别来提高日志记录以获取有关失败原因的更多详细信息。你可以找到更多关于here的信息。

【讨论】:

  • 感谢您的建议!我不重定向到http。但有一点不同:可以通过 http 和 https 访问 xxx.no-ip.org(工作正常)。 www.xxxx.com 只能通过 https 访问。
  • 我已经完成了 - 很多信息。我周末去分析对比一下……
  • 嗨 wottlet,再次感谢您!使用 ncurl 我找到了有效的设置。我认为两个系统都使用相同权限的证书,所以我使用了相同的设置。这是我的误解,它们以不同的openssl版本区分。
  • @HarryBauer 如果 nscurl 命令帮助您解决了问题,请考虑接受答案,以便其他有类似症状的人在将来发现您的问题时可以使用它。
猜你喜欢
  • 1970-01-01
  • 2017-05-03
  • 2015-12-22
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 2015-09-20
  • 1970-01-01
相关资源
最近更新 更多