我遇到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>
答案 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>