Hinzufügen eines selbstsignierten Zertifikats zum iPhone Simulator?

87

Ich habe ein selbstsigniertes Zertifikat am Endpunkt meiner API. Ich versuche, einige Dinge mit dem Simulator zu testen, erhalte jedoch ein "nicht vertrauenswürdiges Serverzertifikat".

Ich habe versucht, Safari auf dem Simulator zu verwenden, um die CRT-Datei herunterzuladen, aber das scheint nicht zu funktionieren.

Woher bezieht der iPhone Simulator seinen Schlüsselbund? Wie kann ich ein vertrauenswürdiges Zertifikat hinzufügen, damit meine Anwendung funktioniert?

AKTUALISIEREN

Ich habe es zum Laufen gebracht, indem ich eine Zertifizierungsstelle erstellt und dann mit dem iPhone-Bereitstellungstool ein Zertifizierungsstellenzertifikat hinzugefügt habe. Dann konnte ich ein Zertifikat von diesem CA-Zertifikat auf dem API-Server signieren lassen, und die NSConnection funktionierte gerade. Ich konnte es aus irgendeinem Grund nicht mit einem selbstsignierten Zertifikat zum Laufen bringen. Ich muss dies mit der Bereitstellungssoftware erneut versuchen.

Meine eigentliche Frage ist, wie ich das auf dem Simulator zum Laufen bringen kann. Ich würde denken, dass der Simulator den Schlüsselbund des tatsächlichen Computers verwendet.

jr.
quelle
1
Ich habe dies kürzlich mit einem Host erreicht, dem ein CA-Zertifikat vertraut, das in den Anmeldeschlüsselbund auf dem Entwicklungs-Mac importiert wurde. (Das heißt, meine lokale Safari vertraut der Site, aber nicht dem Simulator.) Ich war überrascht, dass es mit dem Simulator nicht funktioniert hat. Wie kann man das iPhone-Bereitstellungstool verwenden, um die vertrauenswürdigen Zertifikate auf dem Simulator zu bearbeiten?
Mpontillo

Antworten:

110

Nur zur Information, wenn noch jemand auf dieses Problem stößt:

Ziehen Sie Ihre .cer-Dateien einfach per Drag & Drop in Ihr laufendes Simulator-Fenster. Sie sehen, dass Safari blinkt und dann der Importdialog für Ihr Zertifikat (oder Ihre Zertifizierungsstelle) ...

Arbeiten für iOS 7 Simulator (und i Think funktionierte auch für iOS 6).

Seafoxx
quelle
3
Das Ziehen und Ablegen funktioniert für den iOS 7-Simulator auf jeden Fall einwandfrei. Ich kann überprüfen, ob es auf den iOS 6.0 / 6.1-Simulatoren NICHT funktioniert.
John Bowers
2
bin ich es oder seit ich auf Xcode 6 ugraded bin, funktioniert dieses Drag & Drop-Ding jetzt nur auf der iOS 8-Version des Simulators. Versucht iPhone 5s iOS 7 und iOS 7.1 Simulator, passiert nichts, wenn ich das Zertifikat auf das Simulatorfenster ziehe. Und jetzt stecke ich fest und kann meine App nur in iOS 8 testen.
Fred
2
Umgehung einer Problemumgehung für iOS 7 und 7.1: Legen Sie Ihre CER-Datei auf einem erreichbaren Webserver ab (fügen Sie den MIME-Typ application / x-x509-ca-cert hinzu, falls erforderlich), und verwenden Sie Safari im Simulator, um das Zertifikat herunterzuladen vom Webserver. Sie werden dann aufgefordert, es so zu installieren, als hätten Sie es per Drag & Drop verschoben.
Fred
3
Du bist ein Gott, mein Freund
CommaToast
1
du bist der Mann! Ich wusste, dass es einen schnellen Weg geben musste, dies zu tun.
pqsk
43

Für diejenigen, die feststellen, dass das Ziehen und Ablegen des Zertifikats auf dem Simulator nicht funktioniert, wurde kürzlich eine Änderung vorgenommen , die einen zusätzlichen Schritt hinzufügt .

Der Simulator muss ausdrücklich angewiesen werden, der Stammzertifizierungsstelle zu vertrauen. Gehen Sie dazu zu:

Allgemein -> Info -> Einstellungen für die Zertifikatvertrauensstellung -> "Vollständige Vertrauenswürdigkeit für Stammzertifikat aktivieren" für Ihr bestimmtes Zertifikat

Die vollständige Antwort finden Sie hier :

Gautham C.
quelle
12
Die Option "Vollständiges Vertrauen für
Jesus Rodriguez
1
Haben Sie dieses Problem jemals behoben - das Stammzertifikat ist nicht unter aufgeführt Certificate Trust Settings? Mein Profil hinzugefügt wird und enthält ein Zertifikat - das wurde gerade arbeitet weniger als vor einem Monat. Setzen Sie meine Simulator-Caches zurück. Jetzt wird das Zertifikat hinzugefügt, aber es gibt keine Möglichkeit, ihm vollständig zu vertrauen.
Chris
3
In meinem Fall wird die Option "Vollständige Vertrauenswürdigkeit für Stammzertifikat aktivieren" nur für Stammzertifikate angezeigt. Es erscheint nicht für Zwischen- oder Blattzertifikate.
John Girata
1
Ich habe auch festgestellt, dass für das Zertifikat die CA-Grundeinschränkungsoption auf true gesetzt sein muss: basicConstraints = CA:TRUEbeim Generieren des Zertifikats mit openssl. Andernfalls wird es nicht als vertrauenswürdig angezeigt.
Sandinmyjoints
3
Es scheint, dass in 12.2 (wahrscheinlich auch in früheren Versionen) das Verfahren jetzt darin besteht, zu allgemeinen Profilen zu wechseln, das Zertifikat auszuwählen und oben rechts auf Installieren zu
klicken
22

Ich hatte das gleiche Problem seit Monaten und heute habe ich es ENDLICH gelöst mit:

ADVTrustStore

Sie möchten ein Projekt namens ADVTrustStore verwenden von github verwenden. Es macht etwas ausgefallene Magie, aber es installiert Zertifikate korrekt in Ihrem Root-Trust-Store auf dem Simulator.

Schritte zum Installieren eines benutzerdefinierten Zertifikats

# 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

Mithilfe dieses Prozesses konnte ich GoogleStreetView-Bilder hinter einer Unternehmensfirewall mithilfe von SSL mit selbstsignierten Zertifikaten korrekt rendern lassen

Hintergrund

Ich habe CharlesProxy verwendet und festgestellt, dass Zertifikate korrekt im Simulator installiert wurden, aber sie wurden nicht im Abschnitt Einstellungen - Profile angezeigt. Dann habe ich nach einigem Suchen dieses Tool entdeckt. Es gibt wahrscheinlich ein paar andere Tools, aber in meinem Fall hat das Drag & Drop nie in allen Fällen richtig funktioniert. Safari wäre in Ordnung, aber nicht meine Anwendungen.

Jeef
quelle
2
TIPP: Starten Sie den Simulator neu, um das neue Zertifikat zu installieren.
Kiko Seijo
1
Dies war der Trick für mich mit Xcode 10.1 und iPhone 5s 12.1 Simulator. Sie müssen nur sicherstellen, dass Sie das Skript anweisen, das Zertifikat im richtigen Simulator zu installieren. Wenn Sie dies in Verbindung mit badssl.test verwenden (dh badssl wird lokal im Docker ausgeführt), müssen Sie die .pem-Datei hacken, um alles außer dem eigentlichen Zertifikat zu entfernen.
Andrew Ebling
das hat mir das Leben gerettet. Es gibt fast keine Community-Unterstützung für die Installation selbstsignierter Zertifikate in ios. Danke!
lsimonetti
Ich bestätige, dass es in Simulator 10.3 für iPhone X mit iOS 12.4 funktioniert.
Sergei Basharov
9

Schauen Sie sich das Shell-Skript an, mit dem Charles sein selbstsigniertes Zertifikat im Schlüsselbund des Simulators installiert. http://www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/

Siehe auch:

Es sieht so aus, als ob für die Installation Ihres eigenen Zertifikats im Simulator möglicherweise die Installation über Safari auf einem Gerät und das anschließende Kopieren der resultierenden Zeile vom Gerät erforderlich ist TrustStore.sqlite3 in das Simulator .

Jona
quelle
Die Antwort von @nailer wurde mit einigen weiteren Referenzen aktualisiert. Soweit ich weiß, ist das Format dieser Blobs in TrustStore.sqlite3 undurchsichtig (und kann sich möglicherweise ändern). Daher scheint der Ansatz anderer darin zu bestehen, das Zertifikat über Safari auf einem Gerät zu installieren und Kopieren der resultierenden TrustStore-Zeile in ihren Simulator.
Jonah
8

Wenn Sie OS X Catalina verwenden, überprüfen Sie dies bitte: https://forums.developer.apple.com/thread/124056 .

Catalina blockiert derzeit den Zugriff auf den Ordner Desktop, Dokumente und Downloads. Ich habe Zertifikatdateien in den freigegebenen Ordner verschoben und die Dateien von dort in den Simulator gezogen und dort abgelegt.

KnightCavalry
quelle
3
Gott schenke dir Gesundheit :)
Booharin
2

Mit iPhone Backup Extractor , kopiert ich mein iPhone TrustStore.sqlite3in ~/Library/Application Support/iPhone Simulator/6.0/Library/Keychains, überschreiben die vorhandene Datei. Ich habe versucht, nur eine einzelne Zeile mit dem folgenden SQLite einzufügen, aber ich konnte es nicht zum Laufen bringen.

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

working.sqlHat jetzt den gesamten Inhalt der tsettings-Tabelle (in meinem Fall 1 Zeile).

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

Auch hier haben die oben genannten SQLite-Befehle für mich nicht funktioniert, könnten aber ein guter Ausgangspunkt für jemand anderen sein. Das Kopieren des gesamten TrustStore.sqlite3Backups in den Simulator hat einwandfrei funktioniert.

Heidegrenzen
quelle