14 votes

Comment puis-je générer un certificat PKCS12 de CA à utiliser avec l'Enregistrement de paquets?

J'essayais d'utiliser l'application Packet Capture pour trouver des URLs utilisés par une application. Packet Capture vous permet de capturer des paquets SSL en installant une passerelle VPN avec son propre certificat CA racine, puis en canalisant les requêtes de l'application à travers cette passerelle. Cependant, lorsque j'essaie de générer le certificat depuis l'application (sur mon Galaxy Note 8), je reçois simplement l'erreur "Impossible de créer le certificat". Je ne sais pas pourquoi, car l'application ne donne aucune explication supplémentaire, mais cela signifie que je ne peux pas utiliser la capture SSL dans l'application.

L'application a une autre façon d'importer simplement un certificat CA existant, connue sous le nom de "Importer un fichier PKCS#12". Cependant, j'ai besoin de générer moi-même le fichier PKCS#12 pour utiliser cela, et je ne suis pas sûr comment faire.

Ce que j'ai fait jusqu'à présent : j'ai installé l'application "Dory". Ensuite, j'ai essayé de créer une paire de clés publique/privée, un CSR et un certificat CA racine, en définissant à chaque fois le mot de passe et l'alias sur "abc". Mais lorsque j'ai essayé d'importer le fichier p12 dans Packet Capture, il a simplement dit "java.lang.RuntimeException : Impossible de charger la clé. Le mot de passe pourrait être incorrect." J'ai dû faire une erreur quelque part; que devrais-je faire ensuite?

2 votes

Je n'ai trouvé aucune solution à cela directement (je n'ai trouvé aucun moyen de générer un certificat pour une utilisation avec Packet Capture), mais au cas où d'autres se poseraient la même question, j'ai basculé de Packet Capture vers une application appelée HttpCanary, qui n'a pas le même problème de génération de certificats directement dans l'application. Il offre des fonctionnalités similaires à Packet Capture et fonctionne bien pour moi.

11voto

Jared Kozak Points 56

J'ai rencontré des problèmes avec cela après la mise à jour vers Android 11. Android 11 ne vous permet plus d'ajouter des certificats à partir d'une application autre que l'application des paramètres, vous devrez donc générer et définir le certificat vous-même.

  1. Générer le certificat sous linux. Vous pouvez également le faire sur l'appareil si vous obtenez une application openssl ou un terminal. J'ai suivi ce tutoriel, sauf que j'ai ajouté le nom "alias" à la clé p12 :

openssl req -x509 -newkey rsa:4096 -keyout myKey.pem -out cert.pem -days 365 -nodes

Appuyez sur Entrée pour toutes les invites

openssl pkcs12 -export -out keyStore.p12 -inkey myKey.pem -in cert.pem -name "alias"

Entrez le mot de passe "test"

  1. Transférez keyStore.p12 et cert.pem vers l'appareil Android

  2. Dans les paramètres d'android, allez à Biométrie et sécurité (notez que j'ai un appareil Samsung, cela pourrait être différent pour vous) > Autres paramètres de sécurité > Stockage des informations d'identification > Installer depuis le stockage de l'appareil > Certificat CA > Acceptez l'avertissement rouge effrayant et appuyez sur "Installer quand même" > entrez votre code PIN > trouvez "cert.pem" et cliquez sur "Terminé"

  3. Revenir à "Installer depuis le stockage de l'appareil" > VPN et certificat utilisateur d'application > trouver keyStore.p12 > Entrer le mot de passe "test" et le nommer "alias"

  4. Aller à l'écran d'informations de l'application Packet Capture > Autorisations > Fichiers et médias > Activer "Autoriser la gestion de tous les fichiers"

  5. Ouvrir la capture de paquets > Paramètres > Appuyer sur "Aucun certificat CA" > Importer le fichier PKCS#12 > trouver keyStore.p12. Entrez le mot de passe "test" et l'"alias". Redémarrez la capture de paquets. Si tout fonctionne, le sous-titre "Statut" devrait indiquer "Installé dans les certificats de confiance"

  6. Redémarrer l'appareil

SSL devrait fonctionner pour la plupart des applications maintenant mais cela peut être aléatoire

0 votes

J'étais sur Android 9 et non pas 11, mais je vais accepter votre réponse car elle donne une procédure pour générer le certificat. J'étais désireux de faire cela entièrement dans Android et sans avoir besoin d'utiliser un PC, mais peut-être que c'était trop ambitieux. En tout cas, je n'utilise plus Packet Capture car j'ai basculé vers HttpCanary.

1 votes

Il semble que vous puissiez le faire avec Android. J'ai réussi à exécuter les commandes ci-dessus dans Termux.

1 votes

À l'étape 3, cert.pem est grisée pour moi...

2voto

ebsf Points 75

J'ai réussi à le faire fonctionner sur Android API 34 avec l'option -legacy comme l'a mentionné @JanWytze. Voici un script simple qui va créer la paire et la pousser vers le périphérique (mot de passe : test) :

#!/bin/bash

# Étape 1 : Générer le certificat

# Générer un certificat auto-signé et une clé privée
openssl req -x509 -newkey rsa:4096 -keyout myKey.pem -out cert.pem -days 365 -nodes -subj "/C=US/ST=Some-State/O=Company Name"

# Exporter la clé privée et le certificat dans un keystore PKCS12 en utilisant le drapeau -legacy
openssl pkcs12 -export -out keyStore.p12 -inkey myKey.pem -in cert.pem -name "alias" -passout pass:test -legacy

echo "keyStore.p12 et cert.pem générés avec succès"

# Étape 2 : Transférer les fichiers vers le périphérique Android en utilisant adb

# Vérifier si le périphérique est connecté
if adb devices | grep -q device$; then
    adb push keyStore.p12 /sdcard/
    adb push cert.pem /sdcard/
    echo "Fichiers transférés avec succès vers le périphérique!"
else
    echo "Aucun périphérique trouvé. Assurez-vous que votre périphérique est connecté et le débogage USB est activé."
fi

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