7 votos

¿Cómo conseguir que Android 11 confíe en una CA Root de usuario sin clave privada?

Estoy intentando instalar un nuevo certificado CA Root de usuario en forma DER (archivo .crt) en Android 11, sin mucho éxito. El certificado CA anterior (caducado) funcionaba bien desde una instalación anterior en una versión anterior de Android (no recuerdo bien, probablemente 9 o 10), pero el mismo procedimiento que utilicé entonces ( Seguridad > Cifrado y credenciales > Instalar un certificado > Certificado CA ) muestra ahora el siguiente mensaje de error:

Clave privada necesaria para instalar un certificado

La respuesta de Benedito Marques en esta pregunta funciona, pero como dicen los otros comentaristas esto anula completamente el propósito de tener una CA privada con una clave privada. No quiero que esta clave mi dispositivo, ¿tengo alguna solución?

0 votos

¿Sabes que instalar un certificado de CA root de usuario es inútil, ya que las aplicaciones no confían en esta CA por defecto?

0 votos

Ah, ¿eso cambió en Android 11? Solía ser de esta manera en las versiones anteriores, ¿me puede apuntar a los documentos para eso?

0 votos

No, no es algo nuevo. Todas las aplicaciones orientadas a Android 7+ (nivel de API 24+) ignoran por defecto todos los certificados CA de usuario.

16voto

F.X. Puntos 180

Esta página me indicó la dirección correcta.

Android 11 sólo puede instalar certificados de CA root proporcionados por el usuario para contener el X.509v3 CA:true que sospecho que no era necesario antes por alguna razón, y siguió funcionando después de la actualización hasta que intenté instalar una nueva porque, presumiblemente, la bandera no es necesaria para validar una cadena de confianza TLS.


El siguiente comando puede comprobar si un certificado contiene esa bandera (sustituya el formato de entrada y el nombre del archivo por el que esté utilizando).

$ openssl x509 -inform der -in cacert.crt -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            ....
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = **, O = ***
        ...
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:TRUE
        ...

Si CA:TRUE no está presente en X509x3 Restricciones básicas su certificado Root probablemente no va a funcionar en Android 11.


Para generar un simple certificado CA Root autofirmado para Android 11, estos pasos mínimos me funcionaron, y pueden ser personalizados para su propio certificado:

$ echo 'basicConstraints=CA:true' > android_options.txt
$ openssl genrsa -out priv_and_pub.key 2048
$ openssl req -new -days 3650 -key priv_and_pub.key -out CA.pem
$ openssl x509 -req -days 3650 -in CA.pem -signkey priv_and_pub.key -extfile ./android_options.txt -out CA.crt
$ openssl x509 -inform PEM -outform DER -in CA.crt -out CA.der.crt

El CA.der.crt o CA.crt se pueden instalar en Ajustes > Seguridad > Cifrado y credenciales > Instalar un certificado .

Una vez instalado, aparece propiamente en el Certificados de usuario y todas las aplicaciones que intenten conectarse a sitios que utilicen esa CA Root tendrán éxito.

Esta respuesta parece basarse en los mismos fundamentos, pero es mucho más completo y probablemente funcionará en más plataformas, pero el anterior debería ser un buen ejemplo de funcionamiento mínimo.

0 votos

Soy capaz de crear un CA cert basado en sus instrucciones e instalarlo en Android. Pero por alguna razón cuando creo un certificado de sitio basado en la CA y lo pongo en el servidor, obtengo un error TLS: autoridad de certificación desconocida. ¿Alguna idea? ¿Te importaría mostrar cómo se genera un sitio cert utilizando la CA que creó anteriormente? gracias.

0 votos

@teleclimber Buena pregunta, ¿añadiste el CA cert al final del subcert del servidor? Yo suelo hacer algo como cat server.pem ca.pem > /etc/nginx/cert.pem .

0 votos

Gracias por tu respuesta F.X. Creo que el problema es que FireFox no considera los certificados CA de confianza del sistema operativo. En Chrome funciona.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X