Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
App Transport Security (ATS) applica connessioni sicure tra le risorse Internet (ad esempio il server back-end dell'app) e l'app.
Questo articolo introduce le modifiche alla sicurezza applicate da App Transport Security a un'app iOS 9 e ciò che significa per i progetti Xamarin.iOS, illustra le opzioni di configurazione ats e illustra come rifiutare esplicitamente ATS ATS , se necessario. Poiché ATS è abilitato per impostazione predefinita, tutte le connessioni Internet non sicure genereranno un'eccezione nelle app iOS 9 (a meno che non sia stata esplicitamente consentita).
Informazioni su App Transport Security
Come indicato in precedenza, ATS garantisce che tutte le comunicazioni Internet in iOS 9 e OS X El Capitan siano conformi alle procedure consigliate per la connessione sicura, impedendo così la divulgazione accidentale di informazioni riservate direttamente tramite l'app o una libreria che sta consumando.
Per le app esistenti, implementare il HTTPS protocollo quando possibile. Per le nuove app Xamarin.iOS, è consigliabile usare HTTPS esclusivamente quando si comunica con le risorse Internet. Inoltre, la comunicazione API di alto livello deve essere crittografata usando TLS versione 1.2 con segreto d'inoltro.
Qualsiasi connessione effettuata con NSUrl Connessione ion, CFUrl o NSUrlSession userà ATS per impostazione predefinita nelle app compilate per iOS 9 e OS X 10.11 (El Capitan).
Comportamento predefinito di ATS
Poiché ATS è abilitato per impostazione predefinita nelle app compilate per iOS 9 e OS X 10.11 (El Capitan), tutte le connessioni che usano NSUrl Connessione ion, CFUrl o NSUrlSession saranno soggette ai requisiti di sicurezza di ATS. Se le connessioni non soddisfano questi requisiti, avranno esito negativo con un'eccezione.
Requisiti di ATS Connessione ion
ATS applichererà i requisiti seguenti per tutte le connessioni Internet:
- Tutte le crittografie di connessione devono usare il segreto d'inoltro. Vedere l'elenco delle crittografie accettate di seguito.
- Il protocollo Transport Layer Security (TLS) deve essere versione 1.2 o successiva.
- Almeno un'impronta digitale SHA256 con una chiave RSA a 2048 bit o superiore oppure una chiave Elliptic-Curve (ECC) a 256 bit o superiore deve essere usata per tutti i certificati.
Anche in questo caso, poiché ATS è abilitato per impostazione predefinita in iOS 9, qualsiasi tentativo di stabilire una connessione che non soddisfa questi requisiti comporterà la generazione di un'eccezione.
Crittografie compatibili con ATS
Il seguente tipo di crittografia di segretezza inoltrata viene accettato dalle comunicazioni Internet protette da ATS:
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHATLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHATLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
Per altre informazioni sull'uso delle classi di comunicazione Internet iOS, vedere Guida di riferimento alla classe NSURL Connessione ion di Apple o Riferimento alla classe NSURLSession.
Supporto di ATS in Xamarin.iOS
Poiché ATS è abilitato per impostazione predefinita in iOS 9 e OS X El Capitan, se l'app Xamarin.iOS o qualsiasi libreria o servizio che sta usando stabilisce la connessione a Internet, sarà necessario eseguire alcune azioni o le connessioni genereranno un'eccezione generata.
Per un'app esistente, Apple suggerisce di supportare il HTTPS protocollo il prima possibile. Se non è possibile perché ci si connette a un servizio Web di terze parti che non supporta o se il supporto HTTPSHTTPS sarebbe poco pratico, è possibile rifiutare esplicitamente ATS. Per altri dettagli, vedere la sezione Rifiuto esplicito di ATS più avanti.
Per una nuova app Xamarin.iOS, è consigliabile usare HTTPS esclusivamente quando si comunica con le risorse Internet. Anche in questo caso, potrebbero verificarsi situazioni come l'uso di un servizio Web di terze parti, in cui questo non è possibile e sarà necessario rifiutare esplicitamente ATS.
ATS impone inoltre la crittografia delle comunicazioni API di alto livello usando TLS versione 1.2 con segreto d'inoltro. Per altri dettagli, vedere le sezioni ats Connessione ion Requirements and ATS Compatible Ciphers (Requisiti per l'Connessione ats e le crittografie compatibili con ATS).
Anche se non si ha familiarità con TLS (Transport Layer Security) è il successore di SSL (Secure Socket Layer) e fornisce una raccolta di protocolli di crittografia per applicare la sicurezza sulle connessioni di rete.
Il livello TLS è controllato dal servizio Web che si sta utilizzando ed è quindi esterno al controllo dell'app. Sia il HttpClient che ModernHttpClient devono usare automaticamente il livello massimo di crittografia TLS supportato dal server.
A seconda del server a cui si sta parlando (soprattutto se si tratta di un servizio di terze parti), potrebbe essere necessario disabilitare la segretezza di inoltro o selezionare un livello TLS inferiore. Per altri dettagli, vedere la sezione Configurazione delle opzioni ATS di seguito.
Importante
App Transport Security non si applica alle app Xamarin che usano implementazioni HTTPClient gestite. Si applica alle connessioni che usano solo implementazioni HTTPClient di CFNetwork o implementazioni HTTPClient NSURLSession.
Impostazione dell'implementazione HTTPClient
Per impostare l'implementazione HTTPClient usata da un'app iOS, fare doppio clic sul progetto nel Esplora soluzioni per aprire le opzioni di progetto. Passare a Compilazione iOS e selezionare il tipo di client desiderato nell'elenco a discesa Implementazione httpClient:

Gestore gestito
Il gestore gestito è il gestore HttpClient completamente gestito fornito con le versioni precedenti di Xamarin.iOS ed è il gestore predefinito.
Vantaggi:
- È la versione più compatibile con Microsoft .NET e la versione precedente di Xamarin.
Svantaggi:
- Non è completamente integrato con iOS (ad esempio, è limitato a TLS 1.0).
- In genere è molto più lento rispetto alle API native.
- Richiede più codice gestito e crea app di dimensioni maggiori.
Gestore CFNetwork
Il gestore basato su CFNetwork si basa sul framework nativo CFNetwork .
Vantaggi:
- Usa l'API nativa per ottenere prestazioni migliori e dimensioni eseguibili più piccole.
- Aggiunge il supporto per gli standard più recenti, ad esempio TLS 1.2.
Svantaggi:
- Richiede iOS 6 o versione successiva.
- Non disponibile di watchOS.
- Alcune funzionalità e opzioni httpClient non sono disponibili.
Gestore NSUrlSession
Il gestore basato su NSUrlSession si basa sull'API nativa NSUrlSession .
Vantaggi:
- Usa l'API nativa per ottenere prestazioni migliori e dimensioni eseguibili più piccole.
- Aggiunge il supporto per gli standard più recenti, ad esempio TLS 1.2.
Svantaggi:
- Richiede iOS 7 o versione successiva.
- Alcune funzionalità e opzioni httpClient non sono disponibili.
Diagnosi dei problemi di ATS
Quando si tenta di connettersi a Internet, direttamente o da una visualizzazione Web in iOS 9, è possibile che venga visualizzato un errore nel modulo:
App Transport Security ha bloccato un carico di risorse HTTP () non crittografato perché
http://www.-the-blocked-domain.comnon è sicuro. Le eccezioni temporanee possono essere configurate tramite il file Info.plist dell'app.
In iOS9, App Transport Security (ATS) applica connessioni sicure tra le risorse Internet (ad esempio il server back-end dell'app) e l'app. ATS richiede inoltre la comunicazione tramite il HTTPS protocollo e la comunicazione api di alto livello per essere crittografata usando TLS versione 1.2 con segreto d'inoltro.
Poiché ATS è abilitato per impostazione predefinita nelle app create per iOS 9 e OS X 10.11 (El Capitan), tutte le connessioni che usano NSURLConnectionCFURL o NSURLSession saranno soggette ai requisiti di sicurezza di ATS. Se le connessioni non soddisfano questi requisiti, avranno esito negativo con un'eccezione.
Apple fornisce anche l'app di esempio TLSTool che può essere compilata (o facoltativamente transcodificata in Xamarin e C#) e usata per diagnosticare i problemi di ATS/TLS. Per informazioni su come risolvere questo problema, vedere la sezione Rifiuto esplicito di ATS di seguito.
Configurazione delle opzioni ATS
Puoi configurare diverse funzionalità di ATS impostando i valori per chiavi specifiche nel file Info.plist dell'app. Sono disponibili le chiavi seguenti per il controllo di ATS (rientrato per mostrare come sono annidate):
NSAppTransportSecurity
NSAllowsArbitraryLoads
NSAllowsArbitraryLoadsInWebContent
NSExceptionDomains
<domain-name-for-exception-as-string>
NSExceptionMinimumTLSVersion
NSExceptionRequiresForwardSecrecy
NSExceptionAllowsInsecureHTTPLoads
NSRequiresCertificateTransparency
NSIncludesSubdomains
NSThirdPartyExceptionMinimumTLSVersion
NSThirdPartyExceptionRequiresForwardSecrecy
NSThirdPartyExceptionAllowsInsecureHTTPLoads
Ogni chiave ha il tipo e il significato seguenti:
- NSAppTransportSecurity (
Dictionary): contiene tutte le chiavi e i valori di impostazione per ATS. - NSAllowsArbitraryLoads (
Boolean): seYESATS verrà disabilitato per qualsiasi dominio non elencato inNSExceptionDomains. Per i domini elencati, verranno usate le impostazioni di sicurezza specificate. - NSAllowsArbitraryLoadsInWebContent (
Boolean) - SeYESconsentirà il caricamento corretto delle pagine Web mentre la protezione di Apple Transport Security (ATS) è ancora abilitata per il resto dell'app. - N edizione Standard xceptionDomains (
Dictionary): raccolta di domini che e le impostazioni di sicurezza che ATS devono usare per un determinato dominio. - <domain-name-for-exception-as-string> (
Dictionary): raccolta di eccezioni per un determinato dominio (ad esempio).www.xamarin.com - N edizione Standard xceptionMinimumTLSVersion (
String) - Versione minima di TLS comeTLSv1.0oTLSv1.1TLSv1.2(impostazione predefinita). - N edizione Standard xceptionRequiresForwardSecrecy (
Boolean) - SeNOil dominio non deve usare una crittografia con sicurezza avanzata. Il valore predefinito èYES. - N edizione Standard xceptionAllowsInsecureHTTPLoads (
Boolean) - SeNO(impostazione predefinita) tutte le comunicazioni con questo dominio devono trovarsi nelHTTPSprotocollo. - NSRequiresCertificateTransparency (
Boolean): seYESil livello SSL (Secure Sockets Layer) del dominio deve includere dati di trasparenza validi. Il valore predefinito èNO. - NSIncludesSubdomains (
Boolean): seYESqueste impostazioni sostituiscono tutti i sottodomini del dominio. Il valore predefinito èNO. - NSThirdPartyExceptionMinimumTLSVersion (
String) - Versione TLS usata quando il dominio è un servizio di terze parti al di fuori del controllo dello sviluppatore. - NSThirdPartyExceptionRequiresForwardSecrecy (
Boolean) - SeYESun dominio di terze parti richiede la segretezza avanzata. - NSThirdPartyExceptionAllowsInsecureHTTPLoads (
Boolean) - SeYESATS consentirà la comunicazione non sicura con domini di terze parti.
Rifiuto esplicito di ATS
Anche se Apple suggerisce vivamente l'uso del protocollo e la HTTPS comunicazione sicura con le informazioni basate su Internet, potrebbe capitare che questo non sia sempre possibile. Ad esempio, se stai comunicando con un servizio Web di terze parti o utilizzando annunci forniti da Internet nella tua app.
Se l'app Xamarin.iOS deve effettuare una richiesta a un dominio non sicuro, le modifiche seguenti al file Info.plist dell'app disabiliteranno le impostazioni predefinite di sicurezza applicate da ATS per un determinato dominio:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.the-domain-name.com</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
All'interno di Visual Studio per Mac fare doppio clic sul Info.plist file nella Esplora soluzioni, passare alla visualizzazione Origine e aggiungere le chiavi precedenti:
Se l'app deve caricare e visualizzare contenuto Web da siti non sicuri, aggiungere quanto segue al file Info.plist dell'app per consentire il caricamento corretto delle pagine Web mentre la protezione di Apple Transport Security (ATS) è ancora abilitata per il resto dell'app:
<key>NSAppTransportSecurity</key>
<dict>
<key> NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>
Facoltativamente, puoi apportare le modifiche seguenti al file Info.plist dell'app per disabilitare completamente ATS per tutti i domini e le comunicazioni Internet:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
All'interno di Visual Studio per Mac fare doppio clic sul Info.plist file nella Esplora soluzioni, passare alla visualizzazione Origine e aggiungere le chiavi precedenti:
Importante
Se l'applicazione richiede una connessione a un sito Web non sicuro, è consigliabile immettere sempre il dominio come eccezione usando NSExceptionDomains invece di disattivare completamente ATS usando NSAllowsArbitraryLoads. NSAllowsArbitraryLoads deve essere utilizzato solo in situazioni di emergenza estreme.
Anche in questo caso, la disabilitazione di ATS deve essere usata solo come ultima risorsa, se il passaggio a connessioni sicure non è disponibile o poco pratico.
Riepilogo
Questo articolo ha introdotto App Transport Security (ATS) e descritto il modo in cui applica comunicazioni sicure con Internet. In primo luogo, sono state illustrate le modifiche richieste da ATS per un'app Xamarin.iOS in esecuzione in iOS 9. È stato quindi esaminato il controllo delle funzionalità e delle opzioni di ATS. Infine, è stato illustrato il rifiuto esplicito di ATS nell'app Xamarin.iOS.

