2015-07-23 3 views
21

У меня возникают проблемы из-за новой возможности безопасности от iOS9 от Apple, чтобы ограничить запросы ssl на любые серверы.iOS9 GoogleAnalytics и NSAppTransportSecurity

См ссылка: https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33

На самом деле, я хочу, чтобы использовать по умолчанию и не допускать каких-либо подключение NSAllowsArbitraryLoads: ложные

<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. Сначала я загрузил последние коды примеров и посмотрел на них, конечно, вы не можете ожидать, что библиотека уже поддерживает самые последние бета-системы, тем не менее, я попытался. И это не удалось, как только NSAllowsArbitraryLoads установлено в ложь/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-шифров, я думаю, что они не являются проблемой здесь:

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?[....]

Кто-нибудь придумать решение или, возможно, найти какую-то ошибку в моем подходе?

ответ

10

Фактически вышеуказанная конфигурация была немного неправильной, я нашел рабочий подход.

- Краткая история старт -

В принципе, выше подход был в основном правильно, но я пришел, чтобы проверить конфигурацию снова, когда я поглядела на установленном сетевом соединении с Mac OS 10.10 и ОС 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, так как по умолчанию также устанавливается, чтобы быть ложным и не соответствует действительности. Следующая конфигурация теперь работает для меня:

<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 использует этот «экспериментальный стандарт» (прозрачность сертификата): https://en.wikipedia.org/wiki/Certificate_Transparency Это, кажется, не использовать его в Google Analytics :-)

Смежные вопросы