J'ai créé mon propre certificat CA et je souhaite maintenant l'installer sur mon appareil Android Froyo (HTC Desire Z), afin que l'appareil fasse confiance à mon certificat.
Android stocke les certificats CA dans son keystore Java au format /system/etc/security/cacerts.bks
. J'ai copié le fichier sur mon ordinateur, ajouté mon certificat à l'aide de portecle 1.5 et l' ai repoussé sur l'appareil.
Désormais, Android ne semble pas recharger le fichier automatiquement. J'ai lu dans plusieurs articles de blog que j'ai besoin de redémarrer l'appareil. Cela entraîne à nouveau le remplacement du fichier par le fichier d'origine.
Mon prochain essai a été d'installer le certificat à partir de la carte SD en le copiant et en utilisant l'option correspondante dans le menu des paramètres. L'appareil m'indique que le certificat a été installé, mais apparemment il ne fait pas confiance au certificat. De plus, lorsque j'essaye de copier le keystore sur mon ordinateur, je trouve toujours le stock d'origine cacerts.bks
.
Alors, quelle est la bonne façon d'installer mon propre certificat CA racine sur un appareil Android 2.2 en tant que certificat de confiance? Existe-t-il un moyen de le faire par programme?
la source
Réponses:
Avant Android KitKat, vous devez rooter votre appareil pour installer de nouveaux certificats.
Depuis Android KitKat (4.0) jusqu'à Nougat (7.0), c'est possible et facile. J'ai pu installer le certificat Charles Web Debbuging Proxy sur mon appareil non rooté et renifler avec succès le trafic SSL.
Extrait de http://wiki.cacert.org/FAQ/ImportRootCert
À partir d'Android N, cela devient un peu plus difficile, voir cet extrait du site Web du proxy Charles :
Ajoutez un fichier res / xml / network_security_config.xml à votre application:
Ajoutez ensuite une référence à ce fichier dans le manifeste de votre application, comme suit:
la source
/system/etc/security/cacerts/*.0
) ne sont pas conservés après le redémarrage / redémarrage d'AVD, donc cette solution n'a pas réussi.debug-overrides
, cela signifie-t-il que cettenetwork_security_config
variante de débogage de ciblage uniquement? Si j'ai une autre variante telle que la variante UAT, cela ne fonctionnera pas?J'ai passé beaucoup de temps à essayer de trouver une réponse à cela (j'ai besoin d'Android pour voir les certificats StartSSL). Conclusion: Android 2.1 et 2.2 vous permettent d'importer des certificats, mais uniquement pour une utilisation avec WiFi et VPN. Il n'y a pas d'interface utilisateur pour mettre à jour la liste des certificats racine approuvés, mais il y a une discussion sur l'ajout de cette fonctionnalité. On ne sait pas s'il existe une solution de contournement fiable pour mettre à jour et remplacer manuellement le fichier cacerts.bks.
Détails et liens: http://www.mcbsys.com/techblog/2010/12/android-certificates/ . Dans cet article, consultez le lien vers le bogue Android 11231 - vous voudrez peut-être ajouter votre vote et votre requête à ce bogue.
la source
Si vous avez besoin de votre certificat pour les connexions HTTPS, vous pouvez ajouter le fichier .bks en tant que ressource brute à votre application et étendre DefaultHttpConnection afin que vos certificats soient utilisés pour les connexions HTTPS.
la source
Le guide lié ici répondra probablement à la question initiale sans avoir besoin de programmer un connecteur SSL personnalisé.
Nous avons trouvé un guide pratique très détaillé sur l'importation de certificats racine qui vous guide dans l'installation de certificats CA de confiance sur différentes versions d'appareils Android (entre autres appareils).
En gros, vous devrez:
Téléchargement: le fichier cacerts.bks depuis votre téléphone.
adb pull /system/etc/security/cacerts.bks cacerts.bks
Téléchargez le fichier .crt auprès de l'autorité de certification que vous souhaitez autoriser.
Modifiez le fichier cacerts.bks sur votre ordinateur à l'aide du fournisseur BouncyCastle
Téléchargez le fichier cacerts.bks sur votre téléphone et redémarrez.
Voici une étape plus détaillée par étape pour mettre à jour les téléphones Android précédents: Comment mettre à jour le magasin de clés de l'autorité de certification de sécurité HTTPS sur un appareil pré-android-4.0
la source
Il existe une solution BEAUCOUP plus simple à cela que celle publiée ici ou dans les fils connexes. Si vous utilisez une vue Web (comme je le suis), vous pouvez y parvenir en exécutant une fonction JAVASCRIPT en son sein. Si vous n'utilisez pas de vue Web, vous souhaiterez peut-être en créer une masquée à cette fin. Voici une fonction qui fonctionne dans à peu près n'importe quel navigateur (ou vue Web) pour lancer l'installation de CA (généralement via le référentiel de certificats os partagé, y compris sur un Droid). Il utilise une belle astuce avec iFrames. Passez simplement l'url d'un fichier .crt à cette fonction:
METTRE À JOUR:
L'astuce iframe fonctionne sur les Droids avec l'API 19 et plus, mais les anciennes versions de la vue Web ne fonctionneront pas comme ça. L'idée générale fonctionne toujours cependant - téléchargez / ouvrez simplement le fichier avec une vue Web, puis laissez le système d'exploitation prendre le relais. Cela peut être une solution plus simple et plus universelle (dans le java actuel maintenant):
Notez que instance_ est une référence à l'activité. Cela fonctionne parfaitement si vous connaissez l'URL du cert. Dans mon cas, cependant, je résous cela de manière dynamique avec le logiciel côté serveur. J'ai dû ajouter une bonne quantité de code supplémentaire pour intercepter une URL de redirection et l'appeler d'une manière qui n'a pas causé de crash basé sur une complication de thread, mais je n'ajouterai pas toute cette confusion ici ...
la source
Ce que j'ai fait pour pouvoir utiliser les certificats startssl a été assez simple. (sur mon téléphone enraciné)
J'ai copié /system/etc/security/cacerts.bks sur ma carte SD
Téléchargé http://www.startssl.com/certs/ca.crt et http://www.startssl.com/certs/sub.class1.server.ca.crt
Je suis allé sur portecle.sourceforge.net et j'ai exécuté portecle directement à partir de la page Web.
J'ai ouvert mon fichier cacerts.bks à partir de ma carte SD (rien entré lorsqu'on m'a demandé un mot de passe)
Choisissez l'importation dans portacle et ouvrez sub.class1.server.ca.crt, dans mon cas, il avait déjà le ca.crt mais peut-être que vous devez l'installer aussi.
Sauvegardé le keystore et copié baxck dans /system/etc/security/cacerts.bks (j'ai d'abord fait une sauvegarde de ce fichier au cas où)
J'ai redémarré mon téléphone et maintenant je peux visiter mon site qui utilise un certificat startssl sans erreurs.
la source
Ces étapes ont fonctionné pour moi:
Alternativement, j'ai trouvé ces options que je n'avais pas besoin d'essayer moi-même mais qui semblaient faciles à suivre:
Enfin, cela peut ne pas être pertinent mais, si vous cherchez à créer et configurer un certificat auto-signé (avec mkcert) pour votre application PWA (site Web) hébergée sur un serveur Web IIS local, j'ai suivi cette page:
https://medium.com/@aweber01/locally-trusted-development-certificates-with-mkcert-and-iis-e09410d92031
Merci et j'espère que cela vous aidera !! :)
la source
Voici une solution alternative qui ajoute réellement votre certificat à la liste intégrée des certificats par défaut: Faire confiance à tous les certificats à l'aide de HttpClient sur HTTPS
Cependant, cela ne fonctionnera que pour votre application. Il n'y a aucun moyen de le faire par programme pour toutes les applications sur l'appareil d'un utilisateur, car ce serait un risque pour la sécurité.
la source
Si vous avez un appareil enraciné, vous pouvez utiliser un module Magisk pour déplacer les certificats d'utilisateur vers le système afin qu'il devienne un certificat de confiance
https://github.com/yochananmarqos/Move-Certificates
la source