iOS9 GoogleAnalytics 和 NSAppTransportSecurity
iOS9 GoogleAnalytics and NSAppTransportSecurity
由于 Apple iOS9 限制对任何类型服务器的 SSL 请求的新安全机会,我 运行 遇到了麻烦。
实际上,我想使用默认值,不允许任何类型的连接
NSAllowsArbitraryLoads: false
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
</dict>
当然有些连接是有意的,我从自己的服务器以及第三方服务器检索数据。
您现在可以嗅探由第三方工具生成的应用流量,或者您可以使用记录所有网络流量的方式,参考此处:
在此日志中很容易追踪所有发生的错误(查找错误代码并不难)。
通过这种方式,由于负载限制,我可以很容易地看到正在建立和可能失败的连接(当然,优秀的软件工程师心知肚明;))
尽管来自 Google Analytics,但任何类型的第三方跟踪器或自己的网络设置都 运行ning 很好。
起初我下载了最后的示例代码并查看了它们,当然你不能指望一个库已经支持最新的 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" redirects to "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 分析跟踪对于以下请求仍然失败:
https://ssl.google-analytics.com/collect?[....]
有没有人提出解决方案或者发现我的方法存在某种错误?
其实上面的配置有点不对,我找到了可行的方法
-- 短篇小说开始--
基本上上面的做法大部分是正确的,但是我又来检查配置,当我从Mac OS 10.10和[=34看建立的网络连接时=] 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>
附加说明:尽管 google 使用此 "experimental standard"(证书透明度):https://en.wikipedia.org/wiki/Certificate_Transparency
它似乎没有在 google 分析中使用它 :-)
由于 Apple iOS9 限制对任何类型服务器的 SSL 请求的新安全机会,我 运行 遇到了麻烦。
实际上,我想使用默认值,不允许任何类型的连接 NSAllowsArbitraryLoads: false
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
</dict>
当然有些连接是有意的,我从自己的服务器以及第三方服务器检索数据。
您现在可以嗅探由第三方工具生成的应用流量,或者您可以使用记录所有网络流量的方式,参考此处:
在此日志中很容易追踪所有发生的错误(查找错误代码并不难)。 通过这种方式,由于负载限制,我可以很容易地看到正在建立和可能失败的连接(当然,优秀的软件工程师心知肚明;))
尽管来自 Google Analytics,但任何类型的第三方跟踪器或自己的网络设置都 运行ning 很好。 起初我下载了最后的示例代码并查看了它们,当然你不能指望一个库已经支持最新的 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" redirects to "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 分析跟踪对于以下请求仍然失败: https://ssl.google-analytics.com/collect?[....]
有没有人提出解决方案或者发现我的方法存在某种错误?
其实上面的配置有点不对,我找到了可行的方法
-- 短篇小说开始--
基本上上面的做法大部分是正确的,但是我又来检查配置,当我从Mac OS 10.10和[=34看建立的网络连接时=] 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>
附加说明:尽管 google 使用此 "experimental standard"(证书透明度):https://en.wikipedia.org/wiki/Certificate_Transparency 它似乎没有在 google 分析中使用它 :-)