7 votes

Comment faire en sorte qu'Android 11 fasse confiance à une autorité de certification racine utilisateur sans clé privée ?

Je suis en train d'essayer d'installer un nouveau certificat CA racine d'utilisateur au format DER (.crt fichier) sur Android 11, sans grand succès. Le certificat CA précédent (expiré) fonctionnait très bien lors d'une installation précédente sur une version antérieure d'Android (je ne me souviens pas exactement, probablement 9 ou 10), mais la même procédure que j'ai utilisée à l'époque (Sécurité > Chiffrement & Certificats > Installer un certificat > Certificat CA) affiche maintenant le message d'erreur suivant :

Clé privée requise pour installer un certificat

La réponse de Benedito Marques dans cette question fonctionne, mais comme le disent les autres commentateurs, cela va totalement à l'encontre du but d'avoir un CA privé avec une clé privée. Je ne veux pas cette clé sur mon appareil, ai-je une solution ?

0 votes

Vous savez que l'installation d'un certificat CA utilisateur racine est inutile car les applications ne font pas confiance à ce CA par défaut?

0 votes

Ah, est-ce que cela a changé dans Android 11? C'était comme ça dans les versions précédentes, pouvez-vous me diriger vers la documentation à ce sujet?

0 votes

Non, ce n'est pas quelque chose de nouveau. Toutes les applications ciblant Android 7+ (niveau API 24+) ignorent par défaut tous les certificats CA d'utilisateur.

16voto

F.X. Points 345

Cette page m'a orienté dans la bonne direction.

Android 11 ne peut installer que des certificats CA racine fournis par l'utilisateur pour contenir le drapeau X.509v3 CA:true, ce qui n'était probablement pas nécessaire avant pour une raison quelconque, et continuait de fonctionner après la mise à jour jusqu'à ce que j'essaie d'en installer un nouveau parce que, vraisemblablement, le drapeau n'est pas nécessaire pour valider une chaîne de confiance TLS.


La commande suivante peut vérifier si un certificat contient ce drapeau (remplacez le format d'entrée et le nom de fichier par celui que vous utilisez).

$ 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 le drapeau CA:TRUE n'est pas présent sous Contraintes de base X509v3, votre certificat racine ne fonctionnera probablement pas sur Android 11.


Pour générer un simple certificat CA racine auto-signé pour Android 11, ces étapes minimales ont fonctionné pour moi et peuvent être personnalisées pour votre propre certificat:

$ 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

Les fichiers CA.der.crt ou CA.crt peuvent être installés en allant dans Paramètres > Sécurité > Chiffrement et certificats > Installer un certificat.

Une fois installé, il apparaît correctement dans la liste des Certificats utilisateur, et toutes les applications qui essaient de se connecter à des sites utilisant ce certificat CA racine réussissent.

Cette réponse semble se baser sur les mêmes fondements mais est beaucoup plus complète et fonctionnera probablement sur plus de plateformes, mais celle ci-devant devrait être un bon exemple minimal fonctionnel.

0 votes

Je suis capable de créer un certificat CA selon vos instructions et de l'installer sur Android. Mais pour une raison quelconque, lorsque je crée un certificat de site basé sur le CA et que je le mets sur le serveur, j'obtiens une erreur TLS : autorité de certification inconnue. Des idées ? Auriez-vous l'obligeance de montrer comment vous générez un certificat de site en utilisant le CA que vous avez créé ci-dessus ? Merci.

0 votes

@teleclimber Bonne question, avez-vous ajouté le certificat CA à la fin du sous-certificat du serveur ? Je fais habituellement quelque chose comme cat server.pem ca.pem > /etc/nginx/cert.pem.

0 votes

Merci pour votre réponse F.X. Je pense que le problème vient du fait que FireFox ne considère pas les certificats des autorités de certification fiables du système d'exploitation. Ça fonctionne dans Chrome.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X