Tengo una CA root (airgapped, openssl) que utilizo para muchos proyectos internos de laboratorio.
En el pasado, simplemente he importado el certificado de CA en el almacén de credenciales de usuario en Android y el sistema comenzó a confiar en él inmediatamente.
Acabo de borrar mi teléfono y ahora, en Android 11, soy incapaz de conseguir que este Root CA sea de confianza como lo era antes.
El certificado CA definitivamente tiene la extensión CA:TRUE:
$ openssl x509 -in root.crt -noout -text|grep -B2 TRUE
X509v3 extensions:
X509v3 Basic Constraints:
CA:TRUE
El certificado del servidor que se presenta en el intercambio SSL coincide con el nombre DNS y también incluye el mismo nombre en la extensión SAN:
(...)
Issuer: O = <domain> Lab Root CA, emailAddress = <me>, L = <Place>, ST = <state>, C = US, CN = <domain> Lab Root CA
Validity
Not Before: Aug 13 11:39:55 2020 GMT
Not After : Aug 13 11:39:55 2023 GMT
Subject: C = US, ST = <state>, CN = <lab server name>
(....)
X509v3 Subject Alternative Name:
DNS:<lab server name>
El servidor con el que estoy probando encadena correctamente el cert en la respuesta TLS, y esta configuración funciona perfectamente en un montón de navegadores y combinaciones de SO en el mundo del escritorio (y funcionaba hasta hace poco en Android).
He probado lo siguiente:
-
Importa el certificado de la CA root mediante el método normal de "Importar desde la tarjeta SD". La CA se importa correctamente, pero Chrome sigue dando advertencias de navegador de autoridad no válida.
-
(Rooted) moviendo el cert importado del usuario
/data/misc/user/0/cacerts-added
carpeta de credenciales importadas a/system/etc/security/cacerts
. La CA aparece correctamente en la pestaña "Sistema" de Credenciales de confianza, pero sigue sin funcionar en chrome -
Empaquetar manualmente el archivo codificado con DER en la carpeta System cacerts. Chrome sigue sin funcionar.
-
Siguiendo el ejemplo de algunos certificados de CA de confianza codificados en PEM que ya están en el sistema, he creado el mío propio y lo he puesto en System cacerts. Chrome sigue sin funcionar.
-
Intenté usar un módulo de Magisk para mover los certificados de confianza del usuario al almacén del sistema. Este módulo funcionó como se describió, y movió mi CA root a la pestaña Sistema, pero Chrome todavía no quería confiar para SSL y sigue dando advertencias del navegador.
Algunas otras observaciones:
- Corriendo
curl -vv https://<testurl>
a través de adb se queja constantemente deSSL certificate problem: self signed certificate in certificate chain
aunque la CA que firma el certificado esté en el almacén de credenciales de confianza. - La cadena de confianza de la CA definitivamente funciona bien en los navegadores de escritorio, y a través de
openssl s_client
en un escritorio (Verify return code: 0 (ok)
cuando la CA root se importa a la confianza del escritorio) - He borrado el almacenamiento de aplicaciones de Chrome cada vez que voy a probar después de hacer un cambio. No hay resultados.
¿Hay algo más que pueda probar o algún ajuste que se me haya escapado? Es muy molesto no poder gestionar las CAs Root de confianza en Android 11 como solía hacer.
Preferiría no tener que turbar toda la CA SSL completa que he configurado para algo como Let's Encrypt sólo por la compatibilidad con Android, así que por favor no sugieras eso como una alternativa. Hay muchos puntos finales internos en este laboratorio y mi proveedor de DNS público no admite la automatización para dns-01 ACME, por lo que sería un gran dolor de cabeza hacer proxy y malabares con estos certificados.
Aquí hay una muestra del aspecto de uno de los certificados del servidor:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 4123 (0x101b)
Signature Algorithm: sha256WithRSAEncryption
Issuer: O = <domain> Lab Root CA, emailAddress = <me>, L = <city>, ST = <state>, C = US, CN = <domain> Lab Root CA
Validity
Not Before: Dec 23 13:06:42 2021 GMT
Not After : Dec 22 13:06:42 2024 GMT
Subject: C = US, ST = <state>, CN = monitoring.lab.<domain>
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
(...)
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Server
Netscape Comment:
OpenSSL Generated Server Certificate
X509v3 Subject Key Identifier:
(...)
X509v3 Authority Key Identifier:
keyid:(...)
DirName:/O=<domain> Lab Root CA/emailAddress=<me>/L=<city>/ST=<state>/C=US/CN=<domain> Lab Root CA
serial:(...)
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Alternative Name:
DNS:monitoring.lab.<domain>
Signature Algorithm: sha256WithRSAEncryption
(snip)