App Transport Security阻止HTTPS

时间:2017-11-04 12:34:50

标签: ios app-transport-security

我遇到ATS问题。 我正在使用XCode 9.1,我的开发目标是11.0。 我正在开发使用react-native 0.49

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

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

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

此致

哈利

调试: CFNetwork Diagnostics [1:1187] 12:38:08.258 {            失败了:( null)              加载器:{url = https:// ....               错误:错误域= kCFErrorDomainCFNetwork代码= -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>

2 个答案:

答案 0 :(得分:2)

如果您尝试通过HTTPS进行连接,则使用NSExceptionAllowsInsecureHTTPLoads不应执行任何操作。您的网址(https://www.xxxx.com)是否可能将流量重定向到http://www.xxxx.com

还有其他一些例外情况会影响HTTPS流量,这些异常将允许HTTPS连接无法满足HTTPS的所有要求(例如Forward Secrecy,TLS版本,密钥强度)。你需要做的是弄清楚它失败的确切原因。

要测试ATS合规性的URL,请使用Mac上的nscurl --ats-diagnostics <url>命令。您可以在this post中找到有关ATS的更多信息,以及如何使用/解释上述nscurl命令的结果。

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

答案 1 :(得分:1)

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

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

cmp(X,Y,0) :-
    X < Y.
cmp(X,Y,2) :-
    X > Y.
cmp(X,X,1).

len(X,Y,Cmp) :-
    length(X,K),
    length(Y,I),
    cmp(K,I,Cmp).

并且不要忘记包含子域名:

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

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

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

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

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