Saltar al contenido

¿Cómo instalar un certificado de CA de confianza en un dispositivo Android?

La guía o código que verás en este artículo es la resolución más eficiente y efectiva que hallamos a esta inquietud o problema.

Solución:

Antes de Android KitKat, debe rootear su dispositivo para instalar nuevos certificados.

Desde Android KitKat (4.0) hasta Nougat (7.0) es posible y fácil. Pude instalar el certificado Charles Web Debbuging Proxy en mi dispositivo no rooteado y olfatear con éxito el tráfico SSL.

Extracto de http://wiki.cacert.org/FAQ/ImportRootCert

Antes de la versión 4.0 de Android, con la versión de Android Gingerbread & Froyo, había un único archivo de solo lectura ( /system/etc/security/cacerts.bks ) que contenía el almacén de confianza con todos los certificados de CA (‘sistema’) confiables de forma predeterminada en Androide. Tanto las aplicaciones del sistema como todas las aplicaciones desarrolladas con el SDK de Android utilizan esto. Utilice estas instrucciones para instalar certificados CAcert en Android Gingerbread, Froyo,…

A partir de Android 4.0 (Android ICS/’Ice Cream Sandwich’, Android 4.3 ‘Jelly Bean’ y Android 4.4 ‘KitKat’), los certificados de confianza del sistema se encuentran en la partición del sistema (solo lectura) en la carpeta ‘/system/etc/ security/’ como archivos individuales. Sin embargo, los usuarios ahora pueden agregar fácilmente sus propios certificados de ‘usuario’ que se almacenarán en ‘/data/misc/keychain/certs-added’.

Los certificados instalados por el sistema se pueden administrar en el dispositivo Android en la sección Configuración -> Seguridad -> Certificados -> “Sistema”, mientras que los certificados de confianza del usuario se administran en la sección “Usuario”. Al usar certificados de confianza de usuario, Android obligará al usuario del dispositivo Android a implementar medidas de seguridad adicionales: el uso de un código PIN, un patrón de bloqueo o una contraseña para desbloquear el dispositivo son obligatorios cuando se usan certificados proporcionados por el usuario.

La instalación de certificados CAcert como certificados de “confianza del usuario” es muy fácil. La instalación de nuevos certificados como certificados de “confianza del sistema” requiere más trabajo (y requiere acceso de root), pero tiene la ventaja de evitar el requisito de la pantalla de bloqueo de Android.

Desde Android N en adelante se vuelve un poco más difícil, vea este extracto del sitio web del proxy de Charles:

A partir de Android N, debe agregar la configuración a su aplicación para que confíe en los certificados SSL generados por Charles SSL Proxying. Esto significa que solo puede usar el proxy SSL con las aplicaciones que usted controla.

Para configurar su aplicación para que confíe en Charles, debe agregar un archivo de configuración de seguridad de red a su aplicación. Este archivo puede anular el valor predeterminado del sistema, lo que permite que su aplicación confíe en los certificados CA instalados por el usuario (por ejemplo, el certificado raíz Charles). Puede especificar que esto solo se aplique en las compilaciones de depuración de su aplicación, de modo que las compilaciones de producción utilicen el perfil de confianza predeterminado.

Agregue un archivo res/xml/network_security_config.xml a su aplicación:

    
     
         
            
             
            
      

Luego agregue una referencia a este archivo en el manifiesto de su aplicación, de la siguiente manera:

 

    
     

Pasé mucho tiempo tratando de encontrar una respuesta a esto (necesito Android para ver los certificados StartSSL). Conclusión: Android 2.1 y 2.2 le permiten importar certificados, pero solo para usar con WiFi y VPN. No existe una interfaz de usuario para actualizar la lista de certificados raíz de confianza, pero se está debatiendo sobre cómo agregar esa característica. No está claro si existe una solución alternativa confiable para actualizar y reemplazar manualmente el archivo cacerts.bks.

Detalles y enlaces: http://www.mcbsys.com/techblog/2010/12/android-certificates/. En esa publicación, vea el enlace al error de Android 11231; es posible que desee agregar su voto y consulta a ese error.

Si necesita su certificado para conexiones HTTPS, puede agregar el archivo .bks como recurso sin formato a su aplicación y extender DefaultHttpConnection para que sus certificados se usen para conexiones HTTPS.

public class MyHttpClient extends DefaultHttpClient 

    private Resources _resources;

    public MyHttpClient(Resources resources) 
        _resources = resources;
    

    @Override
    protected ClientConnectionManager createClientConnectionManager() 
        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory
            .getSocketFactory(), 80));
        if (_resources != null) 
            registry.register(new Scheme("https", newSslSocketFactory(), 443));
         else 
            registry.register(new Scheme("https", SSLSocketFactory
                .getSocketFactory(), 443));
        
        return new SingleClientConnManager(getParams(), registry);
    

    private SSLSocketFactory newSslSocketFactory() 
        try 
            KeyStore trusted = KeyStore.getInstance("BKS");
            InputStream in = _resources.openRawResource(R.raw.mystore);
            try 
                trusted.load(in, "pwd".toCharArray());
             finally 
                in.close();
            
            return new SSLSocketFactory(trusted);
         catch (Exception e) 
            throw new AssertionError(e);
        
    

valoraciones y reseñas

Tienes la opción de avalar nuestra función dejando un comentario o valorándolo te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 3.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *