Se utilizzate Android, potreste imbattervi nell’errore NET::ERR_CLEARTEXT_NOT_PERMITTED mentre cercate di accedere a un sito o a un’applicazione web. Questo errore vi impedisce di accedere al sito, ed è un errore esclusivo di questo sistema operativo (OS).
Il messaggio NET::ERR_CLEARTEXT_NOT_PERMITTED appare perché il sito web utilizza informazioni “in chiaro” o non criptate. Fortunatamente, avete diversi modi per aggirare questo errore, sia che siate degli sviluppatori Android, che i responsabili del sito web in questione.
In questo articolo vi presenteremo il concetto di Android Webview e illustreremo le cause dell’errore NET::ERR_CLEARTEXT_NOT_PERMITTED. Infine, vi mostreremo tre modi per risolvere l’errore. Cominciamo!
Cos’è la Webview di Android?
La Webview è una funzione del sistema operativo Android che consente alle app di visualizzare le pagine web senza utilizzare un browser. Questa funzione è comune alle web app, che sono essenzialmente dei wrapper che permettono ai siti web di essere installati sul telefono come applicazioni:
Sebbene Webview vi permetta di accedere ai siti web tramite app, non vi mette a disposizione la stessa quantità di funzioni di un browser. Se state navigando sul web, un browser come Chrome vi offrirà sempre un’esperienza migliore rispetto a Webview.
L’errore NET::ERR_CLEARTEXT_NOT_PERMITTED è unico per le applicazioni che utilizzano Webview nel sistema operativo Android. Infatti, non riscontrerete mai questo errore utilizzando un browser come Chrome. Se state cercando di accedere a un sito web realizzato in PHP tramite HTTP invece che tramite un canale sicuro con un normale browser, potreste incorrere in altri errori, come ad esempio gli avvisi “Not Secure”.
Cosa Significa NET::ERR_CLEARTEXT_NOT_PERMITTED?
Se configurate Webview per caricare una pagina che utilizza HTTP o che contiene altri tipi di informazioni non criptate, l’applicazione restituirà il seguente errore (stiamo utilizzando uno strumento di sviluppo di applicazioni Android per mostrarvelo):
L’errore non significa che il sito web sia inaccessibile o che abbia problemi tecnici. Infatti, se provate ad accedere allo stesso URL con un altro browser, potreste non riscontrare alcun tipo di errore. Al massimo, se si tratta di un URL HTTP, potreste vedere un’icona che indica che state visitando un sito web non protetto.
Poiché l’errore compare solo all’interno delle applicazioni Android, gli utenti possono pensare che ci sia un problema con l’applicazione stessa. Tuttavia, ci sono modi per aggirare e risolvere questo errore, che siate degli sviluppatori di app o i responsabili del sito web che lo mostra. Se siete degli utenti finali, c’è poco da fare oltre a provare ad accedere al sito web con un browser.
Cosa Causa il Messaggio NET::ERR_CLEARTEXT_NOT_PERMITTED?
Per impostazione predefinita, Android impedisce alle app di inviare accidentalmente dati non criptati o “in chiaro”; questa è la configurazione predefinita per le app da Android 9.0.
Questa configurazione si applica alle app che utilizzano Android Webview. Ecco perché l’errore NET::ERR_CLEARTEXT_NOT_PERMITTED compare solo nelle app e non nei browser del sistema operativo Android.
Poiché la causa principale dell’errore sono le informazioni non criptate, ci sono diversi modi per risolvere il problema. Se siete gli sviluppatori dell’app, potete modificare i file di configurazione per abilitare il supporto al cleartext.
In alternativa, se siete i proprietari di un sito web, potrete configurare tutte le pagine del sito in modo che vengano caricate tramite HTTPS. In questo modo, gli utenti non avranno a che fare con canali non criptati, e le app Android che puntano al vostro sito web non restituiranno l’errore NET::ERR_CLEARTEXT_NOT_PERMITTED.
Come Risolvere l’Errore “NET::ERR_CLEARTEXT_NOT_PERMITTED” (3 Metodi)
In questa sezione vi mostreremo come risolvere l’errore NET::ERR_CLEARTEXT_NOT_PERMITTED direttamente su Android e dal vostro sito web. Sarà necessario avere accesso a un dispositivo Android per risolvere l’errore e verificare se persiste.
1. Modificare AndroidManifest.xml
Ogni applicazione Android include un file AndroidManifest.xml. Il file contiene le informazioni sull’applicazione richieste dal sistema operativo, da Google Play Store e da alcuni strumenti per gli sviluppatori.
Il file AndroidManifest.xml contiene anche informazioni sui permessi principali, e se l’applicazione può caricare il testo in chiaro su Webview o meno. Tenete presente che Google sconsiglia di consentire il cleartext a causa di problemi di sicurezza, quindi questo metodo di risoluzione dei problemi dovrebbe essere una soluzione temporanea fino a quando il sito web che state caricando non passa al traffico crittografato.
Per individuare e modificare AndroidManifest.xml (che è simile alla modifica di un file HTML), dovrete accedere al file .apk dell’applicazione o al file sorgente del progetto. Esistono diversi modi per accedere ai file sorgente del progetto di un’applicazione, ma l’approccio più consigliato è quello di utilizzare Android Studio, l’ambiente di sviluppo integrato (IDE) ufficiale per gli sviluppatori Android:
Una volta aperto un progetto in Android Studio, potrete vedere tutti i file correlati in directory standardizzate. Il file AndroidManifest.xml si trova all’interno della directory manifests:
Aprite il file e cercate il sotto-elemento dell’applicazione, che dovrebbe avere questo aspetto:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
</application>
Le variabili all’interno del sotto-elemento applicazione potrebbero cambiare, quindi dovrete cercare i tag di apertura e chiusura dell’applicazione per identificarle. Una volta individuati i tag, incollate la seguente riga di codice:
android:usesCleartextTraffic=”true”
Se c’è già una variabile usesCleartexTraffic impostata su false, cambiatela in true. Salvate quindi le modifiche in AndroidManifest.xml e chiudete il file, e infine salvate le modifiche al progetto.
2. Consentire l’Accesso al Dominio Utilizzando network_security_config.xml
A partire da Android 7.0, Google consente alle applicazioni di utilizzare un file di configurazione della sicurezza di rete per impostare le autorizzazioni per domini e applicazioni specifiche. In poche parole, potete usare network_security_config.xml per aggirare le restrizioni in chiaro per uno o più domini.
Questo approccio è più sicuro rispetto all’abilitazione del supporto cleartext per l’intera applicazione (come mostrato nel metodo precedente). Tuttavia, l’approccio più sicuro sarebbe quello di collegarsi solo a pagine sicure utilizzando Webview.
L’ideale sarebbe utilizzare solo uno di questi due approcci, in quanto abilitare il supporto al cleartext in tutta l’applicazione significa non dover consentire l’accesso a domini specifici. Se volete optare per l’approccio più sicuro, seguite questo metodo.
Con queste premesse, creiamo un file network_security_config.xml per la vostra applicazione. Per farlo, aprite il progetto dell’app con Android Studio (come indicato nella sezione precedente) e navigate nella directory res.
Questa cartella contiene tutti i file non di codice di un progetto di app, compresi i file XML (a parte AndroidManifest.xml), le immagini bitmap e altro ancora. Create un file chiamato network_security_config.xml all’interno della cartella res. Quindi, aprite il file e aggiungete il seguente codice:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">yourwebsite.com</domain>
</domain-config>
</network-security-config>
Questo codice specifica che solo un dominio può utilizzare il cleartext. È possibile anche aggiungere altri elementi “domain includeSubdomains” per consentire l’inserimento di altri URL. Tuttavia, per motivi di sicurezza, vi consigliamo di limitare questa configurazione solo ai domini che ne hanno strettamente bisogno.
Salvate le modifiche al file network_security_config.xml e tornate alla directory manifests. Affinché la configurazione della sicurezza di rete funzioni, dovrete modificare nuovamente AndroidManifest.xml.
Aprite il file e cercate il sottoelemento Application. Quindi, aggiungete la seguente riga di codice all’interno dei suoi tag:
android:networkSecurityConfig="@xml/network_security_config"
Chiudete AndroidManifest.xml dopo aver salvato le modifiche al file e il gioco è fatto. La vostra applicazione dovrebbe ora abilitare il cleartext per il dominio specificato.
3. Forzare il Sito Web a Usare l’HTTPS
La soluzione più sicura all’errore NET::ERR_CLEARTEXT_NOT_PERMITTED consiste nel configurare il sito web che restituisce il messaggio di errore in modo che utilizzi HTTPS. In questo modo, tutti i dati trasmessi da e verso il sito web saranno criptati.
Al giorno d’oggi, non c’è motivo di non utilizzare l’HTTPS per il proprio sito web. Si può ottenere gratuitamente un certificato Secure Sockets Layer (SSL) e impostarlo sul proprio sito in pochi minuti. Infatti, alcuni web host (come Kinsta) possono occuparsi dell’intero processo per voi.
Quando vi iscrivete a un piano di hosting Kinsta, configuriamo noi automaticamente un certificato SSL per il vostro sito web. Inoltre, è possibile forzare il caricamento del vostro sito web tramite HTTPS dal vostro cruscotto MyKinsta.
Per farlo, accedete a MyKinsta, selezionate un sito web e andate alla scheda Strumenti . Cercate l’opzione Forza HTTPS e cliccate su Attiva:
Se non utilizzate Kinsta, potete modificare il file .htaccess di WordPress per reindirizzare il traffico HTTP attraverso HTTPS oppure utilizzare un plugin che faccia il lavoro per voi. Se optate per quest’ultima soluzione, vi consigliamo di utilizzare il plugin Really Simple SSL.
Consultate questo articolo per le istruzioni su come reindirizzare HTTP a HTTPS su Nginx e Apache e sull’uso del plugin in questione. Dopo aver configurato il sito web per utilizzare l’HTTPS, non dovreste più imbattervi nell’errore NET::ERR_CLEARTEXT_NOT_PERMITTED quando utilizzate Android Webview per navigare.
Riepilogo
Se vi capita di imbattervi nell’errore NET::ERR_CLEARTEXT_NOT_PERMITTED in Android, significa che l’applicazione che state utilizzando sta cercando di accedere a una pagina web che vuole trasmettere informazioni in chiaro o non protette. Android impedisce alle app di farlo per evitare di compromettere i dati degli utenti.
Se siete dei normali utenti, dovrete utilizzare un browser per visitare il sito web che restituisce l’errore. Tuttavia, se siete gli sviluppatori dell’app o del sito web, potete provare a modificare il file AndroidManifest.xml, ad abilitare il dominio tramite il file network_security_config.xml e a forzare il sito web all’uso di HTTPS.
Gli utenti di Kinsta hanno molte meno probabilità di incorrere nell’errore NET::ERR_CLEARTEXT_NOT_PERMITTED per i propri siti web. Questo perché configuriamo automaticamente i certificati SSL per i nuovi siti web e consentiamo di reindirizzare il traffico tramite HTTPS con pochi clic. Date un’occhiata ai nostri piani di web hosting o di hosting di applicazioni per trovare quello più adatto a voi!