ios swift ssl google-analytics ios9

iOS9 GoogleAnalytics and NSAppTransportSecurity



swift ssl (1)

Estoy teniendo problemas debido a la nueva oportunidad de seguridad del iOS9 de Apple para restringir las solicitudes de SSL a cualquier tipo de servidores.

Consulte la referencia: https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33

En realidad, quiero utilizar el valor predeterminado y no permitir ningún tipo de conexión NSAllowsArbitraryLoads: false

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

Por supuesto, algunas conexiones están destinadas y recupero datos de servidores propios y de servidores de terceros.

Ahora puede oler el tráfico de la aplicación, generado por herramientas de terceros, o hacer uso del registro de todo el tráfico de red, al que se hace referencia aquí: ¿Cómo puedo saber qué URL está bloqueando la Seguridad de transporte de aplicaciones?

Es fácil rastrear todos los errores que ocurren en este registro (no es demasiado difícil buscar un código de error). De esta manera, pude ver fácilmente qué conexiones se establecieron y tal vez fallaron, debido a las limitaciones de carga (por supuesto, los buenos ingenieros de software lo saben de memoria)

Cualquier tipo de rastreador de terceros o la configuración de red propia funciona bien, a pesar de Google Analytics. Al principio descargué los últimos códigos de Ejemplo y los eché un vistazo, por supuesto, no puede esperar que una biblioteca ya admita los sistemas beta más recientes, sin embargo, lo intenté. Y falló tan pronto como NSAllowsArbitraryLoads se estableció en falso / NO

Incluso con limitar lo menos posible para el tercero, no pude hacerlo funcionar:

<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>

También probé google-analytics.com e incluir subdominios NSIncludesSubdomains: true. Y, como la simple llamada al sitio web en el navegador de " https://google-analytics.com " redirige a " https://www.google.com/analytics/ " También intenté permitir que google.com sea un dominio de excepción adicional. que también falla.

Incluso eché un vistazo a los cifrados ssl admitidos, creo que aquí no hay problema:

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

Por lo tanto, el seguimiento de Google Analytics aún falla para solicitudes como: https://ssl.google-analytics.com/collect?[....]

¿Alguien ha encontrado una solución o ha encontrado algún tipo de error en mi enfoque?


En realidad, la configuración anterior era un poco incorrecta, encontré un enfoque de trabajo.

- Comienzo de la historia corta -

Básicamente, el enfoque anterior fue en su mayoría correcto, pero vine a revisar la configuración nuevamente, cuando eché un vistazo a la conexión de red establecida desde Mac OS 10.10 y OS 10.11

openssl s_client -connect ssl.google-analytics.com:443 -status

Mac OS 10.10 hizo uso de TLSv1.2, mientras que Mac OS 10.11 por cualquier razón usó TLSv1.0

- Fin del cuento -

Entonces, después de repensar los atributos, NSRequiresCertificateTransparency transparencia del Certificado NSRequiresCertificateTransparency , ya que el valor predeterminado también se establece como falso y no verdadero. La siguiente configuración ahora funciona para mí:

<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>

Nota adicional: aunque Google hace uso de este "estándar experimental" (transparencia del certificado): https://en.wikipedia.org/wiki/Certificate_Transparency Parece que no se utiliza en google analytics :-)