2015-07-23 7 views
21

Mi trovo nei guai a causa della nuova opportunità di sicurezza offerta da iOS9 di Apple per limitare le richieste ssl a qualsiasi tipo di server.iOS9 GoogleAnalytics e NSAppTransportSecurity

Vai alla tabella: https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33

In realtà, voglio fare uso di default e non consentire qualsiasi tipo di connessione NSAllowsArbitraryLoads: true

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

Naturalmente alcuni collegamenti sono destinati e recuperare i dati dai propri server e dai server di terze parti.

entrambi i casi è ora possibile intercettare il traffico dell'applicazione, che è generato da strumenti di terze parti, o fare uso di registrazione tutto il traffico di rete, fatto riferimento qui: How can I figure out which URL is being blocked by App Transport Security?

E 'facile rintracciare tutti gli errori che si verificano in questo registro (non troppo difficile da cercare un codice di errore). In questo modo sono stato facilmente in grado di vedere quali connessioni sono state stabilite e forse non riuscite, a causa dei limiti di carico (ovviamente, i buoni ingegneri del software sanno a memoria;))

Qualsiasi tipo di tracker di terze parti o la propria rete l'installazione funziona correttamente, nonostante Google Analytics. All'inizio ho scaricato gli ultimi codici di esempio e li ho visti, ovviamente non ci si può aspettare che una libreria supporti già i più recenti sistemi beta, tuttavia, ho provato. E non è riuscito appena le NSAllowsArbitraryLoads è impostato su false/NO

Anche con limitando il meno possibile per la terza parte non ero in grado di farlo funzionare:

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

provato anche google-analytics .com e includere sottodomini NSIncludesSubdomains: true. Inoltre, poiché il semplice richiamo del sito web nel browser "https://google-analytics.com" reindirizza a "https://www.google.com/analytics/", ho anche provato a consentire a google.com come dominio delle eccezioni aggiuntivo, anche questo non riesce.

aveva anche uno sguardo ai ssl-cifrari supportati, penso che non sono un problema qui:

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 

Così, l'analisi dei dati di monitoraggio di Google non riesce ancora a domande come: https://ssl.google-analytics.com/collect?[....]

Qualcuno ha trovare una soluzione o magari trovare qualche tipo di errore nel mio approccio?

risposta

10

In realtà la configurazione di cui sopra era leggermente errata, ho trovato un approccio di lavoro.

- Breve storia dall'inizio -

In sostanza, l'approccio di cui sopra è stato per lo più corretto, ma mi si avvicinò per controllare nuovamente la configurazione, quando ho avuto uno sguardo alla connessione di rete stabilita da Mac OS e OS 10.10 10,11

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

Mac OS 10.10 fatto uso di TLSv1.2, mentre Mac OS 10.11 per qualsiasi motivo utilizzato TLSv1.0

- end Breve storia -

Così, dopo ripensare gli attributi, ho rimosso la trasparenza Certificato NSRequiresCertificateTransparency, come impostazione predefinita è previsto anche di essere falsa e non è vero. La seguente configurazione ora lavora per me:

<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 aggiuntiva: Anche se Google si avvale di questo "tipo sperimentale" (trasparenza certificato): https://en.wikipedia.org/wiki/Certificate_Transparency Sembra di non fare uso di esso in Google Analytics :-)