Ajouter un certificat auto-signé à iPhone Simulator?

87

J'ai un certificat auto-signé au point de terminaison de mon API. J'essaye de tester certaines choses en utilisant le simulateur mais j'obtiens un "certificat de serveur non approuvé".

J'ai essayé d'utiliser safari sur le simulateur pour télécharger le fichier .crt, mais cela ne semble pas fonctionner.

D'où iPhone Simulator tire-t-il son trousseau? Comment puis-je ajouter un certificat de confiance pour que mon application fonctionne?

MISE À JOUR

Je l'ai fait fonctionner en créant une CA, puis en ajoutant un certificat CA à l'aide de l'outil de provisionnement iPhone. Ensuite, j'ai pu avoir un certificat signé par ce certificat CA sur le serveur API et le NSConnection a juste fonctionné. Je n'ai pas pu le faire fonctionner à l'aide d'un certificat auto-signé pour une raison quelconque. Je dois réessayer à l'aide du logiciel d'approvisionnement.

Ma vraie question est de savoir comment faire fonctionner cela sur le simulateur? Je pense que le simulateur utilise le trousseau de l'ordinateur réel.

jr.
la source
1
J'ai récemment frappé cela avec un hôte approuvé par un certificat CA qui a été importé dans le trousseau de connexion sur le Mac de développement. (Autrement dit, mon Safari local fait confiance au site, mais pas au simulateur.) J'ai été surpris que cela ne fonctionne pas avec le simulateur. Comment utiliser l'outil de provisioning iPhone pour manipuler les certificats de confiance sur le simulateur?
mpontillo

Réponses:

113

Juste pour info, si quelqu'un rencontre toujours ce problème:

faites simplement glisser et déposez vos fichiers .cer dans la fenêtre du simulateur en cours d'exécution. Vous verrez Safari clignoter, puis la boîte de dialogue d'importation pour votre certificat (ou autorité de certification) ...

Travailler pour le simulateur iOS 7 (et je pense aussi pour iOS 6).

seafoxx
la source
3
Le glisser-déposer fonctionne bien pour le simulateur iOS 7. Je peux vérifier que cela ne fonctionne PAS sur les simulateurs iOS 6.0 / 6.1.
John Bowers
2
est-ce moi ou depuis que je suis passé à Xcode 6, ce truc de glisser-déposer ne fonctionne maintenant que sur la version iOS 8 du simulateur. J'ai essayé le simulateur iOS 7 et iOS 7.1 pour iPhone 5s, rien ne se passe lorsque je fais glisser le certificat sur la fenêtre du simulateur. Et maintenant, je suis bloqué et je ne peux pas tester mon application dans autre chose que iOS 8.
Fred
2
Solution de contournement pour iOS 7 et 7.1: placez votre fichier .cer sur un serveur Web accessible (en ajoutant le type de mime application / x-x509-ca-cert s'il en a besoin) et utilisez Safari sur le simulateur pour télécharger le certificat depuis le serveur Web. Il vous demandera ensuite de l'installer comme si vous l'aviez glissé et déposé.
Fred le
3
Tu es un dieu mon ami
CommaToast
1
tu es l'homme! Je savais qu'il devait y avoir un moyen rapide de faire cela.
pqsk
44

Pour ceux qui trouvent que le glisser-déposer du certificat sur le simulateur ne fonctionne pas, il y a eu un changement récent qui ajoute une étape supplémentaire .

Le simulateur doit être explicitement informé de faire confiance à l'autorité de certification racine. Faites ceci en allant à:

Général -> À propos -> Paramètres de confiance du certificat -> "Activer la confiance totale pour le certificat racine" pour votre certificat

Voir la réponse complète ici :

Gautham C.
la source
13
L'option «Activer la confiance totale pour le certificat racine» n'existe pas du tout sur mon simulateur exécutant ios 10.3
Jesus Rodriguez
1
Avez-vous déjà résolu ce problème - le certificat racine n'est pas répertorié sous Certificate Trust Settings? Mon profil est ajouté et comprend un certificat - cela a été tout fonctionne il y a moins d'un mois. Réinitialisez mes caches de simulateur, maintenant le certificat est ajouté mais aucune option pour lui faire entièrement confiance.
chrisp
3
Dans mon cas, l'option "Activer la confiance totale pour le certificat racine" apparaît uniquement pour les certificats racine. Il n'apparaît pas pour les certificats intermédiaires ou feuille.
John Girata
1
J'ai également constaté que le certificat doit avoir l'option de contrainte de base CA définie sur true: basicConstraints = CA:TRUElors de la génération du certificat à l'aide d'openssl. Sinon, il ne sera pas fiable.
sandinmyjoints
3
Il semble que sur la version 12.2 (probablement les versions antérieures également), la procédure consiste maintenant à accéder aux profils généraux>, à sélectionner le certificat et à cliquer sur installer en haut à droite
MaxPRafferty
23

J'ai eu ce même problème pendant des mois et aujourd'hui je l'ai FINALEMENT résolu avec:

ADVTrustStore

Vous allez vouloir utiliser un projet appelé ADVTrustStore de github. Il fait de la magie, mais il installera correctement les certificats dans votre magasin de confiance racine sur le simulateur.

Étapes pour installer un certificat personnalisé

# Clone the repo
git clone https://github.com/ADVTOOLS/ADVTrustStore.git

# Enter the repo directory
cd ADVTrustStore/

# Copy your .crt file 
cp somewhere/something.crt my.crt

# conver to a .pem file
openssl x509 -in my.crt -out my.pem -outform PEM

# Install the pem in the simulators
./iosCertTrustManager.py -a my.pem

En utilisant ce processus, j'ai pu obtenir un rendu correct des images GoogleStreetView derrière un pare-feu d'entreprise en utilisant SSL en démissionnant avec des certificats auto-signés

Contexte

J'utilisais CharlesProxy et j'ai remarqué qu'il installait correctement les certificats dans le simulateur mais ils n'apparaissaient pas dans la section Paramètres - Profils . Puis après quelques recherches, j'ai découvert cet outil. Il existe probablement quelques autres outils, mais dans mon cas, le glisser-déposer n'a jamais fonctionné correctement dans tous les cas. Safari serait bien mais pas mes applications.

Jeef
la source
3
CONSEIL: redémarrez le simulateur pour installer le nouveau certificat.
Kiko Seijo
1
Cela a fonctionné pour moi avec le simulateur Xcode 10.1 et iPhone 5s 12.1. Vous devez simplement vous assurer de dire au script d'installer le certificat dans le bon simulateur. Si vous utilisez ceci en conjonction avec badssl.test (c'est-à-dire badssl s'exécutant localement dans docker), vous devrez pirater le .pem pour tout supprimer sauf le certificat réel.
Andrew Ebling
cela m'a sauvé la vie. il n'y a presque pas de support communautaire pour l'installation de certificats auto-signés dans ios. Merci!
lsimonetti
Je confirme que cela fonctionne dans Simulator 10.3 pour iPhone X avec iOS 12.4.
Sergei Basharov
9

Jetez un œil au script shell que Charles utilise pour installer son certificat auto-signé dans le trousseau du simulateur. http://www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/

Voir également:

Il semble que l'installation de votre propre certificat dans le simulateur peut nécessiter de l'installer sur un appareil via Safari, puis de copier la ligne résultante de l'appareil TrustStore.sqlite3dans le simulateur.

Jonas
la source
Réponse @nailer mise à jour avec quelques références supplémentaires, pour autant que je sache, le format de ces blobs dans TrustStore.sqlite3 est opaque (et potentiellement sujet à changement), donc l'approche que d'autres ont adoptée semble être d'installer le certificat sur un appareil via Safari et en copiant la ligne TrustStore résultante dans leur simulateur.
Jonah
9

Pour toute personne utilisant OS X Catalina, veuillez vérifier ceci: https://forums.developer.apple.com/thread/124056 .

Catalina bloque actuellement l'accès au dossier Bureau, Documents et Téléchargements. J'ai déplacé les fichiers de certificat vers le dossier partagé et glissez-déposez les fichiers vers le simulateur à partir de là.

ChevalierCavalerie
la source
3
Dieu vous accorde la santé :)
Booharin
2

En utilisant iPhone Backup Extractor , j'ai copié mon iPhone, TrustStore.sqlite3en ~/Library/Application Support/iPhone Simulator/6.0/Library/Keychainsécrasant le fichier existant. J'ai essayé de n'insérer qu'une seule ligne avec le sqlite suivant, mais je n'ai pas pu le faire fonctionner.

sqlite3 ~/backup/iOS\ Files/TrustStore.sqlite3
sqlite3>.mode insert
sqlite3>.output working.sql
sqlite3>select * from tsettings;
sqlite3>.quit

Maintenant, working.sqla tout le contenu de la table tsettings (dans mon cas, 1 ligne).

sqlite3 ~/Library/Application\ Support/iPhone\ Simulator/6.0/Library/Keychains/TrustStore.sqlite3
sqlite3>INSERT INTO tsettings VALUES(X'...
sqlite3>.quit

Encore une fois, les commandes sqlite ci-dessus ne fonctionnaient pas pour moi, mais pourraient être un bon point de départ pour quelqu'un d'autre. Copier l'intégralité TrustStore.sqlite3de la sauvegarde dans le simulateur fonctionnait très bien.

Frontières de la santé
la source