l'installation de certificat auto-signé revendique le succès, mais Android agit comme si le certificat n'est pas là

17

J'essaie d'installer le certificat auto-signé pour mon serveur Web dans Android 4.3. J'ai le fichier .crt à la racine de la carte SD (qui est en fait émulé car je n'ai pas de carte SD dans la fente).

Pour installer le certificat, je vais dans Paramètres -> Général -> Sécurité -> Stockage des informations d'identification -> Installer à partir du stockage de l'appareil.

Je reçois une boîte de dialogue indiquant le nom du certificat (le nom de fichier moins l'extension .crt) que je peux modifier (mais pas), un menu déroulant "utilisé pour" avec "VPN et applications" sélectionné et du texte en bas de la boîte de dialogue qui informe "Le paquet contient: un certificat utilisateur". Tout semble correct, alors je clique sur "Ok". La boîte de dialogue disparaît et un message de toast apparaît avec "[nom] installé".

Cependant, si je vais immédiatement dans "Informations d'identification de confiance et sélectionnez" Utilisateur ", il n'y a rien là-bas! Le nouveau certificat n'est pas non plus sous" Système "mais je ne m'y attendrais pas. Si je vais dans un navigateur après cela et que j'essaye d'aller sur mon site Web, je reçois toujours l'avertissement que le certificat du site n'est pas approuvé. J'ai également essayé de redémarrer, mais cela ne fait aucune différence.

Qu'est-ce que je fais mal? L'absence totale de messages d'erreur n'est pas utile. Est-il possible que mon certificat soit dans le mauvais format? J'ai essayé d'utiliser le fichier .crt dans le répertoire ssl du serveur et j'ai essayé de le convertir au format DER.

Mise à jour: j'ai lu quelque part qu'Android requiert que les certificats soient au format p12, j'ai donc converti le certificat Apache2 en p12 à l'aide de la commande suivante:

openssl pkcs12 -export -inkey server.key -in server.crt -out ~/server.p12

J'ai ensuite répété les étapes ci-dessus, j'ai reçu le même message de réussite, puis j'ai continué à ne pas voir le certificat dans les informations d'identification de l'utilisateur et j'obtiens toujours l'erreur de certificat non fiable du navigateur mobile.

Michael
la source

Réponses:

19

J'ai eu le même problème pour qu'Android installe vraiment le certificat, jusqu'à ce que je trouve ce site qui décrit une méthode qui a fonctionné pour moi. Il se résume aux étapes suivantes:

  1. Créez une clé privée et un certificat public x509 avec des extensions v3_req et activé en tant qu'autorité de certification:

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/my_site.key -out /etc/ssl/certs/my_site.crt -reqexts v3_req -extensions v3_ca

  2. Convertissez le certificat au format DER, ce qui est compris par Android:

    sudo openssl x509 -in /etc/ssl/certs/my_site.crt -outform der -out my_site.der.crt

  3. Utilisez n'importe quelle méthode pour accéder my_site.der.crtà votre appareil Android - j'ai trouvé facile d'avoir simplement le fichier hébergé par mon serveur Web et de le télécharger via le navigateur Android, qui vous permet ensuite automatiquement de l'installer.

Bien que j'aurais aimé que l'étape 1 soit divisée en deux (1a. Génération de clé privée et 1b. Génération de certificat public), je n'ai pas investi trop de temps à rechercher comment procéder. S'il vous plaît laissez-moi savoir dans un commentaire si vous avez trouvé un moyen qui fonctionne, merci.

(Plutôt que d'ajouter un commentaire, je pense que cela fait vraiment partie de la réponse pour référence future, donc je le modifie. - Michael)

Au lieu de créer un certificat activé en tant qu'autorité de certification, j'ai créé une autorité de certification auto-signée, puis j'ai re-signé ma clé / csr existante avec la nouvelle autorité de certification. Ensuite, j'ai ajouté le CA auto-signé à Android et le tour est joué! Ça a marché!

Génération de l'autorité de certification auto-signée:

openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem

Re-signer un CSR existant que j'avais depuis la création de la clé du

openssl x509 -req -in existing.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out existing.crt -days 3649

Maintenant, en utilisant une forme modifiée de votre deuxième commande, j'ai converti le certificat CA en forme DER:

openssl x509 -in /etc/apache2/ssl/rootCA.pem -outform der -out ~/rootCA.der.crt

La grande chose à ce sujet est que tous les certificats supplémentaires non approuvés qui sont maintenant re-signés avec la nouvelle autorité de certification auto-signée seront désormais approuvés sur n'importe quel appareil que la nouvelle autorité de certification installée sans avoir besoin d'installer autre chose. Cela ne résout pas exactement le problème de la confiance accordée aux sites sur lesquels vous n'avez aucun contrôle, mais cela peut être plus facile si vous avez une influence sur (par exemple) votre service informatique pour un serveur interne ou quelque chose.

FriendFX
la source
1
J'ai déjà le certificat que je dois installer, j'ai donc essayé l'étape 2 et il n'apparaît toujours pas dans les informations d'identification de confiance de l'utilisateur après avoir prétendu réussir l'installation, et Chrome affiche toujours l'erreur "site non approuvé" après le redémarrage.
Michael
1
Pourrait-il y avoir quelque chose sur l'extension v3_req et activé en tant qu'autorité de certification que le certificat doit avoir pour Android pour l'utiliser? Si oui, existe-t-il une commande que je peux utiliser pour prendre un certificat existant et y ajouter ces informations, car je n'ai pas le contrôle sur tous les certificats que je veux installer.
Michael
3
Pour répondre à la première moitié de ma question précédente, j'ai lu la page que vous aviez liée, et il semble que le problème est qu'Android refuse d'installer des certificats auto-signés (mais pas des autorités de certification auto-signées). Cela semble non documenté, et le fait qu'Android fasse semblant d'installer le rend encore pire. Mais la question demeure, si j'ai un certificat auto-signé sur lequel je n'ai pas de contrôle, y a-t-il un moyen de le "CA" -ifyify afin que je puisse l'installer?
Michael
1
@J'espère que cela ne vous dérange pas, je vais modifier votre réponse pour inclure ma solution, plutôt que de l'inclure dans les commentaires, car elle fait vraiment partie de la réponse.
Michael
1
Je ne comprends pas comment la demande de signature.csr existante est générée. Je pense que c'est le dernier point manquant pour un tutoriel complet étape par étape.
cguenther