Подтвердить что ты не робот

IOS9 GoogleAnalytics и NSAppTransportSecurity

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

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

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

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <false/>
    </dict>

Конечно, некоторые подключения предназначены, и я получаю данные от собственных серверов, а также от сторонних серверов.

Либо вы можете теперь нюхать трафик приложения, который генерируется сторонними инструментами, или вы используете регистрацию всего сетевого трафика, на который здесь ссылаются: Как узнать, какой URL-адрес блокируется приложением Transport Transport Security?

В этом журнале легко отслеживать все возникающие ошибки (не слишком сложно найти код ошибки). Таким образом, я легко мог видеть, какие соединения устанавливаются и, возможно, не удается из-за ограничений нагрузки (конечно, хорошие программисты знают наизусть;))

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

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

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

4b9b3361

Ответ 1

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

- Начало короткой истории -

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