由于Apple iOS9的新安全机会将ssl请求限制在任何类型的服务器上,我遇到了麻烦。
实际上,我想使用默认值而不允许任何类型的连接 NSAllowsArbitraryLoads:false
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
</dict>
当然有些连接是有意的,我从自己的服务器以及第三方服务器检索数据。
您现在可以嗅探由第三方工具生成的应用流量,或者您使用记录所有网络流量,如下所示: How can I figure out which URL is being blocked by App Transport Security?
很容易跟踪此日志中发生的所有错误(不太难以查找错误代码)。 通过这种方式,由于负载限制(当然,优秀的软件工程师深知这一点,我很容易看到正在建立的连接并且可能失败)。)
尽管有Google Analytics,但任何类型的第三方跟踪器或自己的网络设置都运行良好。 起初我下载了最后一个示例代码并查看了它们,当然你不能指望一个库已经支持最新的beta系统,不过,我试了一下。一旦NSAllowsArbitraryLoads设置为false / NO
,它就会失败即使第三方限制尽可能少,我也无法让它运行:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>ssl.google-analytics.com</key>
<dict>
<key>NSRequiresCertificateTransparency</key>
<true/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
还尝试了google-analytics.com并包含子域名NSIncludesSubdomains:true。而且,由于浏览器中的简单网站“https://google-analytics.com”会重定向到“https://www.google.com/analytics/”,我还尝试将google.com作为附加异常域,但也失败了。
即使查看了支持的ssl-ciphers,我认为这里没问题:
nmap --script ssl-enum-ciphers -p 443 ssl.google-analytics.com
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 256) - C
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (dh 256) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (dh 256) - A
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (dh 256) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (dh 256) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (dh 256) - A
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (dh 256) - A
| TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (dh 256) - A
| TLS_ECDHE_RSA_WITH_RC4_128_SHA (dh 256) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - A
| TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - A
因此,对于以下请求,Google Analytics分析跟踪仍然失败: https://ssl.google-analytics.com/collect?[....]
有人提出解决方案或者在我的方法中发现某种错误吗?
答案 0 :(得分:9)
实际上上面的配置有点不对,我找到了一种有效的方法。
- 短篇小说开始 -
基本上,上述方法大多是正确的,但是当我查看Mac OS 10.10和OS 10.11建立的网络连接时,我再次检查配置
openssl s_client -connect ssl.google-analytics.com:443 -status
Mac OS 10.10使用TLSv1.2,而Mac OS 10.11因任何原因使用TLSv1.0
- 短篇小说结束 -
因此,在重新考虑属性之后,我删除了证书透明度NSRequiresCertificateTransparency
,因为默认值也设置为false而不是true。以下配置现在适用于我:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>ssl.google-analytics.com</key>
<dict>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
补充说明:虽然谷歌使用了这个&#34;实验标准&#34; (证书透明度):https://en.wikipedia.org/wiki/Certificate_Transparency 它似乎没有在谷歌分析中使用它: - )