我遇到了麻烦,因为苹果的iOS9提供了一个新的安全机会,将ssl请求限制在任何类型的服务器上。
参见参考资料:ref/doc/uid/TP40009251-SW33
实际上,我想使用默认值,不允许任何类型的连接( 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?
很容易跟踪这个日志中发生的所有错误(不太难查找错误代码)。通过这种方式,我可以很容易地看到哪些连接正在建立,并且可能由于负载限制而失败(当然,优秀的软件工程师都知道这一点);
任何类型的第三方跟踪器或自己的网络设置都运行得很好,尽管来自。起初,我下载了最后一个示例代码,并查看了它们,当然,您不能期望库已经支持最新的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>还尝试了GoogleAnalytics.com并包括子域NSIncludesSubdomains:true。而且,当简单的网站在浏览器中调用"https://google-analytics.com“重定向到"https://www.google.com/analytics/”时,我也尝试允许google.com作为额外的异常域,这也失败了。
即使查看了支持的ssl-密码,我认为它们在这里没有问题:
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?[....]
有没有人想出解决办法,或者在我的方法中发现了某种错误?
发布于 2015-07-29 07:43:10
实际上,上面的配置有点错误,我找到了一种工作方法。
-短篇小说开始--
基本上,上面的方法基本上是正确的,但是当我查看从MacOS10.10和OS10.11建立的网络连接时,我再次检查了配置
openssl s_client -connect ssl.google-analytics.com:443 -statusMacOS10.10使用TLSv1.2,而MacOS10.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使用了这个“实验标准”(证书透明性):Transparency,但似乎没有在google分析中使用它:-)
https://stackoverflow.com/questions/31579507
复制相似问题