Selettore di implementazione HTTPClient e SSL/TLS per Android
I selettori HttpClient Stack e SSL/TLS Implementazione determinano l'implementazione HttpClient e SSL/TLS che verrà usata dalle app Xamarin.Android.
I progetti devono fare riferimento all'assembly System.Net.Http .
Avviso
Aprile 2018 : a causa di un aumento dei requisiti di sicurezza, tra cui la conformità PCI, i principali provider di servizi cloud e server Web devono interrompere il supporto delle versioni TLS precedenti alla 1.2. Per impostazione predefinita, i progetti Xamarin creati nelle versioni precedenti di Visual Studio usano versioni precedenti di TLS.
Per garantire che le app continuino a funzionare con questi server e servizi, è necessario aggiornare i progetti Xamarin con le Android HttpClient impostazioni e Native TLS 1.2 illustrate di seguito, quindi ricompiolere e ridribuire le app agli utenti.
La configurazione HttpClient di Xamarin.Android si trova in Project Opzioni > Android, quindi fare clic sul pulsante Opzioni avanzate.
Queste sono le impostazioni consigliate per il supporto di TLS 1.2:
Opzioni di configurazione alternative
AndroidClientHandler
AndroidClientHandler è il nuovo gestore che delega al codice Java/OS nativo anziché implementare tutto nel codice gestito. È consigliabile selezionare questa opzione.
Vantaggi
- Usare l'API nativa per ottenere prestazioni migliori e dimensioni eseguibili inferiori.
- Supporto per gli standard più recenti, ad esempio. TLS 1.2.
Svantaggi
- Richiede Android 4.1 o versione successiva.
- Alcune funzionalità/opzioni httpClient non sono disponibili.
Gestito (HttpClientHandler)
Il gestore gestito è il gestore HttpClient completamente gestito fornito con le versioni precedenti di Xamarin.Android.
Vantaggi
- È la più compatibile (funzionalità) con MS .NET e le versioni precedenti di Xamarin.
Svantaggi
- Non è completamente integrato con il sistema operativo (ad esempio, limitato a TLS 1.0).
- In genere è molto più lento (ad esempio la crittografia) rispetto all'API nativa.
- Richiede più codice gestito, creando applicazioni di dimensioni maggiori.
Scelta di un gestore
La scelta tra AndroidClientHandler e HttpClientHandler dipende dalle esigenze dell'applicazione. AndroidClientHandler è consigliato per il supporto di sicurezza più aggiornato, ad esempio.
- È necessario il supporto tls 1.2+.
- L'app è destinata ad Android 4.1 (API 16) o versione successiva.
- È necessario il supporto tls 1.2+ per
HttpClient. - Non è necessario il supporto tls 1.2+ per
WebClient.
HttpClientHandler è una buona scelta se è necessario il supporto TLS 1.2+ ma deve supportare versioni di Android precedenti ad Android 4.1. È anche una buona scelta se è necessario il supporto tls 1.2+ per WebClient.
A partire da Xamarin.Android 8.3, HttpClientHandler il valore predefinito è Boring SSL (btls) come provider TLS sottostante. Il provider TLS SSL Boring offre i vantaggi seguenti:
- Supporta TLS 1.2+.
- Supporta tutte le versioni di Android.
- Fornisce il supporto TLS 1.2+ sia per che
HttpClientWebClientper .
Lo svantaggio dell'uso di Boring SSL come provider TLS sottostante è che può aumentare le dimensioni dell'APK risultante (aggiunge circa 1 MB di dimensioni APK aggiuntive per ABI supportato).
A partire da Xamarin.Android 8.3, il provider TLS predefinito è Boring SSL (btls). Se non si vuole usare Boring SSL, è possibile ripristinare l'implementazione SSL gestita cronologica impostando la $(AndroidTlsProvider) proprietà su legacy . Per altre informazioni sull'impostazione delle proprietà di compilazione, vedere Processo di compilazione.
Uso a livello di codice AndroidClientHandler
Xamarin.Android.Net.AndroidClientHandler è un'implementazione HttpMessageHandler specifica per Xamarin.Android.
Le istanze di questa classe useranno l'implementazione nativa java.net.URLConnection per tutte le connessioni HTTP. Ciò offrirà teoricamente un aumento delle prestazioni HTTP e dimensioni APK più piccole.
Questo frammento di codice è un esempio di come usare in modo esplicito una singola istanza della HttpClient classe :
// Android 4.1 or higher, Xamarin.Android 6.1 or higher
HttpClient client = new HttpClient(new Xamarin.Android.Net.AndroidClientHandler ());
Nota
Il dispositivo Android sottostante deve supportare TLS 1.2 (ad esempio. Android 4.1 e versioni successive). Si noti che il supporto ufficiale per TLS 1.2 è in Android 5.0+. Tuttavia, alcuni dispositivi supportano TLS 1.2 in Android 4.1+.
Opzione di compilazione dell'implementazione SSL/TLS
Questa opzione di progetto controlla quale libreria TLS sottostante verrà usata da tutte le richieste Web, sia che HttpClientWebRequest. Per impostazione predefinita, è selezionato TLS 1.2:
Ad esempio:
var client = new HttpClient();
Se l'implementazione di HttpClient è stata impostata su Gestito e l'implementazione di TLS TLS era impostata su Native TLS 1.2+, l'oggetto userà automaticamente l'oggetto client gestito HttpClientHandler e TLS 1.2 (fornito dalla libreria BoringSSL) per le richieste HTTP.
Tuttavia, se l'implementazione httpClient è impostata su AndroidHttpClient, tutti gli HttpClient oggetti useranno la classe java.net.URLConnection Java sottostante e non saranno interessati dal valore di implementazione TLS/SSL . WebRequest gli oggetti userebbero la libreria BoringSSL.
Altri modi per controllare la configurazione SSL/TLS
Esistono tre modi in cui un'applicazione Xamarin.Android può controllare le impostazioni TLS:
- Selezionare l'implementazione HttpClient e la libreria TLS predefinita nella Project Opzioni.
- A livello di codice usando
Xamarin.Android.Net.AndroidClientHandler. - Dichiarare le variabili di ambiente (facoltativo).
Tra le tre opzioni, l'approccio consigliato consiste nell'usare le opzioni di progetto Xamarin.Android per dichiarare il valore predefinito HttpMessageHandler e TLS per l'intera app. Quindi, se necessario, creare Xamarin.Android.Net.AndroidClientHandler un'istanza di oggetti a livello di codice. Queste opzioni sono descritte in precedenza.
La terza opzione , che usa le variabili di ambiente, è illustrata di seguito.
Dichiarare le variabili di ambiente
Esistono due variabili di ambiente correlate all'uso di TLS in Xamarin.Android:
XA_HTTP_CLIENT_HANDLER_TYPE: questa variabile di ambiente dichiara l'impostazione predefinitaHttpMessageHandlerche verrà usata dall'applicazione. Ad esempio:XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandlerXA_TLS_PROVIDER– Questa variabile di ambiente dichiarerà quale libreria TLS verrà usata, ,btlslegacyodefault(uguale a omettere questa variabile):XA_TLS_PROVIDER=btls
Questa variabile di ambiente viene impostata aggiungendo un file di ambiente al progetto. Un file di ambiente è un file di testo normale in formato Unix con un'azione di compilazione AndroidEnvironment:
Per altre informazioni sulle variabili di ambiente e su Xamarin.Android, vedere la guida all'ambiente Xamarin.Android .





