Si utilizas Android, es posible que te encuentres con el error NET::ERR_CLEARTEXT_NOT_PERMITTED al intentar acceder a un sitio web o a una aplicación web. Este error te bloqueará el acceso al sitio, y es exclusivo de este Sistema Operativo (SO).
El mensaje NET::ERR_CLEARTEXT_NOT_PERMITTED aparece porque el sitio web utiliza «cleartext» o información no cifrada. Afortunadamente, hay formas de evitar este error, tanto si eres un desarrollador de Android como si estás a cargo del sitio web en cuestión.
En este artículo, te introduciremos en el concepto de Android Webview y discutiremos las causas del error NET::ERR_CLEARTEXT_NOT_PERMITTED. A continuación, te mostraremos tres formas de solucionar el error. ¡Manos a la obra!
¿Qué Es Android Webview?
Webview es una función del sistema operativo Android que permite a las aplicaciones mostrar páginas web sin utilizar un navegador. Esta característica es común en las aplicaciones web, que básicamente son wrappers que permiten que los sitios web se instalen en tu teléfono como aplicaciones:
Aunque Webview te permite acceder a sitios web a través de apps, no obtienes la misma cantidad de funciones que en un navegador. Si estás navegando por la web, un navegador como Chrome siempre te proporcionará una experiencia mejor que Webview.
El error NET::ERR_CLEARTEXT_NOT_PERMITTED es exclusivo de las aplicaciones que utilizan Webview en el SO Android. No te encontrarás con este error cuando utilices un navegador como Chrome. Si intentas acceder a un sitio web creado con PHP a través de HTTP en lugar de un canal seguro con un navegador normal, es posible que te encuentres con otros errores, como advertencias de «No Seguro».
¿Qué Significa NET::ERR_CLEARTEXT_NOT_PERMITTED?
Si configuras Webview para que cargue una página que utilice HTTP o que contenga otro tipo de información no cifrada, la aplicación devolverá el siguiente error (estamos utilizando una herramienta de desarrollo de aplicaciones Android para mostrártelo):
El error no significa que el sitio web sea inaccesible o sufra problemas técnicos. De hecho, si intentas acceder a la misma URL utilizando otro navegador, es posible que no te encuentres con ningún tipo de error. Como mucho, si se trata de una URL HTTP, puede que veas un icono que indica que estás visitando un sitio web no seguro.
Como el error solo aparece dentro de las aplicaciones de Android, puede hacer creer a los usuarios que hay un problema con la propia aplicación. Sin embargo, hay formas de evitar y solucionar este error, tanto si eres un desarrollador de aplicaciones como si estás a cargo del sitio web que lo muestra. Si eres un usuario final, hay poco que puedas hacer aparte de intentar acceder al sitio web utilizando un navegador.
¿Qué Causa el Mensaje NET::ERR_CLEARTEXT_NOT_PERMITTED?
Por defecto, Android impide que las apps envíen accidentalmente datos sin cifrar o «cleartext». Esta ha sido la configuración predeterminada para las aplicaciones desde Android 9.0.
Esta configuración se aplica a las aplicaciones que utilizan Android Webview. Por eso el error NET::ERR_CLEARTEXT_NOT_PERMITTED solo aparece dentro de las apps y no en los navegadores dentro del SO Android.
Como la causa principal del error es la información no cifrada, hay diferentes formas de solucionarlo. Si eres el desarrollador de la aplicación, puedes modificar los archivos de configuración que habilitan el soporte para cleartext.
Alternativamente, si eres el propietario del sitio web, puedes configurar todas las páginas del sitio para que se carguen a través de HTTPS. De esta forma, los usuarios no tendrán que lidiar con canales sin cifrar, y las aplicaciones de Android que apunten a tu sitio web no devolverán el error NET::ERR_CLEARTEXT_NOT_PERMITTED.
Cómo Solucionar el Error «NET::ERR_CLEARTEXT_NOT_PERMITTED» (3 Maneras)
En esta sección, te mostraremos cómo solucionar el error NET::ERR_CLEARTEXT_NOT_PERMITTED directamente en Android y desde tu sitio web. Necesitarás acceso a un dispositivo Android para solucionar el error y comprobar si persiste.
1. Modificar AndroidManifest.xml
Cada aplicación Android incluye un archivo AndroidManifest.xml. El archivo contiene información sobre la aplicación que es necesaria para el sistema operativo, Google Play Store y algunas herramientas para desarrolladores.
El archivo AndroidManifest.xml también incluye información sobre los permisos de las claves y sobre si la aplicación puede cargar cleartext a través de Webview o no. Ten en cuenta que Google desaconseja permitir el cleartext debido a problemas de seguridad, por lo que este procedimiento de solución de problemas debería ser una solución temporal hasta que el sitio web que estás cargando cambie al tráfico cifrado.
Para localizar y editar AndroidManifest.xml (que es similar a editar un archivo HTML), necesitarás acceder al archivo .apk de la aplicación o al código fuente del proyecto. Hay varias formas de acceder a los archivos fuente del proyecto de una aplicación. El método recomendado es utilizar Android Studio, que es el Entorno de Desarrollo Integrado (IDE) oficial para desarrolladores de Android:
Una vez que abras un proyecto en Android Studio, podrás ver todos sus archivos relacionados en directorios estandarizados. El archivo AndroidManifest.xml se encontrará dentro del directorio manifests:
Abre el archivo y busca el subelemento application, que debería tener este aspecto:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
</application>
Las variables dentro del subelemento application pueden cambiar, así que tendrás que buscar las etiquetas de apertura y cierre de la aplicación para identificarlas. Una vez localizadas las etiquetas, pega la siguiente línea de código:
android:usesCleartextTraffic=”true”
Si ya hay una variable usesCleartexTraffic establecida en false, cámbiala a true. Cuando hayas terminado, guarda los cambios en AndroidManifest.xml y cierra el archivo, después guarda los cambios en el proyecto.
2. Permitir el Dominio Utilizando network_security_config.xml
A partir de Android 7.0, Google permite a las aplicaciones utilizar un archivo de configuración de seguridad de red para establecer permisos para dominios y aplicaciones específicos. En pocas palabras, puedes utilizar network_security_config.xml para eludir las restricciones de texto claro para uno o más dominios.
Este enfoque es más seguro que habilitar el soporte cleartext en toda la aplicación (como se muestra en el método anterior). Sin embargo, lo más seguro sería enlazar únicamente a páginas seguras mediante Webview.
Lo ideal es que sólo utilices uno de estos dos enfoques, ya que habilitar el soporte cleartext en toda la aplicación significa que no tienes que permitir dominios específicos. Si quieres optar por el enfoque más seguro, sigue este método.
Teniendo esto en cuenta, vamos a crear un archivo network_security_config.xml para tu aplicación. Para ello, abre el proyecto de la aplicación con Android Studio (como se indica en la sección anterior) y navega hasta el directorio res.
Este directorio incluye todos los archivos que no son de código de un proyecto de aplicación, incluidos los archivos XML (aparte de AndroidManifest.xml), imágenes de mapa de bits, etc. Crea un archivo llamado network_security_config.xml dentro del directorio res. A continuación, abre el archivo y añade el siguiente código:
<?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>
Este código especifica que sólo un dominio puede utilizar cleartext. Puedes añadir más elementos «domain includeSubdomains» para permitir URLs adicionales. Sin embargo, por razones de seguridad, te recomendamos que limites esta configuración solo a los dominios que lo necesiten estrictamente.
Guarda los cambios en network_security_config.xml y vuelve al directorio manifests. Para que la configuración de seguridad de red funcione, tendrás que editar de nuevo AndroidManifest.xml.
Abre el archivo y busca el subelemento application. A continuación, añade la siguiente línea de código dentro de sus etiquetas:
android:networkSecurityConfig="@xml/network_security_config"
Cierra AndroidManifest.xml después de guardar los cambios en el archivo y ya está. Tu aplicación debería activar ahora el cleartext para el dominio que hayas especificado.
3. Forzar el Uso de HTTPS en Tu Sitio Web
La solución más segura al error NET::ERR_CLEARTEXT_NOT_PERMITTED es configurar el sitio web que devuelve el mensaje de error para que utilice HTTPS. De esta forma, todos los datos transmitidos hacia y desde el sitio web estarán encriptados.
En la web moderna, no hay razón para no utilizar HTTPS en tu sitio web. Puedes conseguir un certificado SSL (Secure Sockets Layer) gratis y configurarlo en tu sitio en cuestión de minutos. De hecho, algunos alojamientos web (como Kinsta) pueden encargarse de todo el proceso por ti.
Cuando contratas un plan de alojamiento de Kinsta, configuramos automáticamente un certificado SSL para tu sitio web. Además, puedes forzar que tu sitio web se cargue a través de HTTPS desde tu panel de control MyKinsta.
Para ello, accede a MyKinsta, selecciona un sitio web y ve a la pestaña Herramientas. Busca la opción que dice Forzar HTTPS y haz clic en Activar:
Si no utilizas Kinsta, puedes modificar tu archivo .htaccess de WordPress para redirigir el tráfico HTTP a través de HTTPS o utilizar un plugin que haga el trabajo por ti. Si optas por esto último, te recomendamos que utilices el plugin Really Simple SSL.
Puedes consultar este artículo para obtener instrucciones sobre cómo redirigir HTTP a HTTPS en Nginx y Apache, y cómo utilizar el plugin en cuestión. Después de configurar tu sitio web para que utilice HTTPS, ya no deberías encontrarte con el error NET::ERR_CLEARTEXT_NOT_PERMITTED al utilizar Android Webview para navegar por él.
Resumen
Si te encuentras con el error NET::ERR_CLEARTEXT_NOT_PERMITTED en Android, entonces la aplicación que estás utilizando está intentando acceder a una página web que quiere transmitir cleartext o información no segura. Android impide que las aplicaciones hagan esto para evitar comprometer los datos de los usuarios.
Si eres un usuario normal, tendrás que utilizar un navegador para visitar la página web que está devolviendo el error. Sin embargo, si eres el desarrollador detrás de la aplicación o del sitio web, puedes intentar modificar el archivo AndroidManifest.xml, permitir el dominio a través de network_security_config.xml y forzar a tu sitio web a utilizar HTTPS.
Es mucho menos probable que los usuarios de Kinsta se encuentren con el error NET::ERR_CLEARTEXT_NOT_PERMITTED en sus propios sitios web. Esto se debe a que configuramos automáticamente certificados SSL para los nuevos sitios web y te permitimos redirigir el tráfico a través de HTTPS con unos simples clics. Explora nuestros planes de alojamiento web o de aplicaciones para encontrar el que mejor se adapte a tus necesidades