App Transport Security 阻止 HTTPS
App Transport Security blocks HTTPS
我对 ATS 有疑问。
我正在使用 XCode 9.1,我的开发目标是 11.0。
我正在使用 react-native 0.49
进行开发
我的程序正在获取具有有效 (google chrome) letsencrypt 证书的 https (https://www.xxxx.com) 资源.
提取仅在 NSAllowsArbitraryLoads 设置为 true 时有效,设置为 false 时提取被阻止(调试)?
我正在使用临时域 (https://xxxx.no-ip.org) 进行一些测试。此域还具有有效的 letsencrypt 证书。在这种情况下一切正常。
我能看到的两个主机之间的唯一区别是测试域是单域主机,生产主机是多域主机。
有人有什么建议吗?
此致,
哈利
调试出来:
CFNetwork 诊断 [1:1187] 12:38:08.258 {
失败了:(空)
装载机:{url = https://....
错误:错误域=kCFErrorDomainCFNetwork 代码=-1200“(空)”用户信息={_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>
有时会发生这种情况,因为您的证书不符合 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/>
如果您尝试通过 HTTPS 连接,使用 NSExceptionAllowsInsecureHTTPLoads
应该不会有任何作用。有没有可能你的URL (https://www.xxxx.com) is redirecting traffic to http://www.xxxx.com?
还有其他例外情况会影响 HTTPS 流量,这些例外情况将允许不满足 HTTPS 的所有要求(例如转发保密性、TLS 版本、密钥强度)的 HTTPS 连接。您需要做的是弄清楚它失败的确切原因。
要测试 URL 是否符合 ATS,请在 Mac 上使用 nscurl --ats-diagnostics <url>
命令。您可以在 this post.
中找到有关 ATS 的更多信息,以及如何使用/解释上述 nscurl 命令的结果。
此外,您可以通过提高 CFNETWORK_DIAGNOSTICS
级别来增加日志记录以获取有关失败原因的更多详细信息。您可以了解更多相关信息 here.
我对 ATS 有疑问。 我正在使用 XCode 9.1,我的开发目标是 11.0。 我正在使用 react-native 0.49
进行开发我的程序正在获取具有有效 (google chrome) letsencrypt 证书的 https (https://www.xxxx.com) 资源. 提取仅在 NSAllowsArbitraryLoads 设置为 true 时有效,设置为 false 时提取被阻止(调试)?
我正在使用临时域 (https://xxxx.no-ip.org) 进行一些测试。此域还具有有效的 letsencrypt 证书。在这种情况下一切正常。
我能看到的两个主机之间的唯一区别是测试域是单域主机,生产主机是多域主机。 有人有什么建议吗?
此致,
哈利
调试出来: CFNetwork 诊断 [1:1187] 12:38:08.258 { 失败了:(空) 装载机:{url = https://.... 错误:错误域=kCFErrorDomainCFNetwork 代码=-1200“(空)”用户信息={_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>
有时会发生这种情况,因为您的证书不符合 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/>
如果您尝试通过 HTTPS 连接,使用 NSExceptionAllowsInsecureHTTPLoads
应该不会有任何作用。有没有可能你的URL (https://www.xxxx.com) is redirecting traffic to http://www.xxxx.com?
还有其他例外情况会影响 HTTPS 流量,这些例外情况将允许不满足 HTTPS 的所有要求(例如转发保密性、TLS 版本、密钥强度)的 HTTPS 连接。您需要做的是弄清楚它失败的确切原因。
要测试 URL 是否符合 ATS,请在 Mac 上使用 nscurl --ats-diagnostics <url>
命令。您可以在 this post.
此外,您可以通过提高 CFNETWORK_DIAGNOSTICS
级别来增加日志记录以获取有关失败原因的更多详细信息。您可以了解更多相关信息 here.