19 votes

L'installation d'un certificat auto-signé est un succès, mais Android agit comme si le certificat n'existait pas.

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

Pour installer le certificat, je vais dans Setting -> General -> Security -> Credential Storage -> Install from device storage.

J'obtiens une boîte de dialogue indiquant le nom du certificat (le nom de fichier sans l'extension .crt) que je peux modifier (mais je ne le fais pas), un menu déroulant "used for" avec "VPN and apps" sélectionné et un texte en bas de la boîte de dialogue qui informe "Package contains : one user certificate". Tout semble correct, je clique donc sur "Ok". La boîte de dialogue disparaît et un toast s'affiche avec "[nom] installé".

Cependant, si je me rends immédiatement dans la section "Références de confiance" et que je sélectionne "Utilisateur", il n'y a rien ! Le nouveau certificat ne se trouve pas non plus dans "Système", mais je ne m'attendais pas à ce qu'il s'y trouve. Si j'ouvre un navigateur après cela et que j'essaie d'accéder à mon site Web, je reçois toujours l'avertissement indiquant que le certificat du site n'est pas fiable. 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 ne m'aide pas. Est-il possible que mon certificat soit au 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 exigeait que les certificats soient au format p12, j'ai donc converti le certificat Apache2 en p12 en utilisant 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 obtenu le même message de réussite, puis je n'ai toujours pas vu le certificat dans les informations d'identification de l'utilisateur et je reçois toujours l'erreur de certificat non fiable dans le navigateur mobile.

20voto

FriendFX Points 546

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. Elle se résume aux étapes suivantes :

  1. Créez une clé privée et un certificat public x509 avec les extensions v3_req et activé en tant que CA :

    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, 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 obtenir le my_site.der.crt sur votre appareil Android - j'ai trouvé facile de faire héberger le fichier par mon serveur web et de le télécharger via le navigateur Android, qui vous permet ensuite de l'installer automatiquement.

Bien que j'aurais aimé que l'étape 1 soit divisée en deux (1a. génération de la clé privée et 1b. génération du certificat public), je n'ai pas investi trop de temps à chercher comment faire cela. 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, j'ai l'impression que cela doit faire partie de la réponse pour référence future, donc je l'édite. --Michael)

Au lieu de créer un certificat activé en tant qu'AC, j'ai créé une AC auto-signée, puis j'ai re-signé ma clé/csr existante avec la nouvelle AC. J'ai ensuite ajouté l'AC auto-signée à Android et voilà ! Cela a fonctionné !

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

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

Re-signature d'une RSC existante que j'avais depuis la création de la clé à partir de l'interface de l'entreprise.

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 format DER :

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

Ce qui est génial, c'est que tous les autres certificats non fiables qui sont maintenant re-signés avec la nouvelle autorité de certification auto-signée seront maintenant fiables sur n'importe quel appareil qui a 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 faciliter les choses si vous avez une quelconque influence sur (disons) votre service informatique pour un serveur interne ou autre.

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