Aggiungere un certificato autofirmato a iPhone Simulator?


90

Ho un certificato autofirmato all'endpoint della mia API. Sto provando a testare alcune cose usando il simulatore ma ricevo un "certificato server non affidabile".

Ho provato a utilizzare Safari sul simulatore per scaricare il file .crt, ma non sembra funzionare.

Da dove prende il portachiavi iPhone Simulator? Come posso aggiungere un certificato attendibile in modo che la mia applicazione funzioni?

AGGIORNARE

Ho funzionato creando una CA e quindi aggiungendo un certificato CA utilizzando lo strumento di provisioning per iPhone. Quindi ho potuto avere un certificato firmato da quel certificato CA sul server API e NSConnection ha funzionato. Non sono riuscito a farlo funzionare utilizzando un certificato autofirmato per qualche motivo. Devo riprovare utilizzando il software di provisioning.

La mia vera domanda è come faccio a farlo funzionare sul simulatore? Penso che il simulatore utilizzi il portachiavi del computer vero e proprio.


1
Di recente l'ho colpito con un host attendibile da un certificato CA importato nel portachiavi di accesso sul Mac di sviluppo. (Cioè, il mio Safari locale si fida del sito, ma non del simulatore.) Sono rimasto sorpreso che non funzionasse con il simulatore. Come si utilizza lo strumento di provisioning di iPhone per manipolare i certificati attendibili sul simulatore?
mpontillo

Risposte:


115

Solo per informazioni, se qualcuno continua a riscontrare quel problema:

trascina e rilascia i tuoi file .cer nella finestra del simulatore in esecuzione. Vedrai Safari lampeggiare e quindi la finestra di dialogo di importazione per il tuo certificato (o autorità di certificazione) ...

Funziona per iOS 7 Simulator (e penso abbia funzionato anche per iOS 6).


3
Il trascinamento e il rilascio funzionano bene per il simulatore iOS 7 abbastanza sicuro. Posso verificare che NON funziona sui simulatori iOS 6.0 / 6.1.
John Bowers

2
sono io o da quando sono passato a Xcode 6, questa cosa drag & drop ora funziona solo sulla versione iOS 8 del simulatore. Ho provato il simulatore di iPhone 5s iOS 7 e iOS 7.1, non succede nulla quando trascino il certificato nella finestra del simulatore. E ora sono bloccato e non posso testare la mia app su dispositivi diversi da iOS 8.
Fred

2
Ho trovato una soluzione alternativa per iOS 7 e 7.1: metti il ​​tuo file .cer su un server web raggiungibile, (aggiungendo il tipo mime application / x-x509-ca-cert se necessario) e usa Safari sul simulatore per scaricare il certificato dal server web. Ti chiederà quindi di installarlo come se lo avessi trascinato e rilasciato.
Fred

3
Sei un dio amico mio
CommaToast

1
tu sei l'uomo! Sapevo che doveva esserci un modo veloce per farlo.
pqsk

45

Per coloro che scoprono che il trascinamento del certificato sul simulatore non funziona, c'è stata una recente modifica che aggiunge un passaggio in più .

Al simulatore deve essere detto esplicitamente di considerare attendibile la CA radice. Fallo andando a:

Generale -> Informazioni su -> Impostazioni di attendibilità del certificato -> "Abilita attendibilità totale per certificato radice" per il certificato specifico

Vedi la risposta completa qui :


13
L'opzione "Abilita attendibilità totale per certificato radice" non è presente sul mio simulatore con iOS 10.3
Jesus Rodriguez

1
Hai mai risolto questo problema: il certificato radice non era elencato sotto Certificate Trust Settings? Il mio profilo viene aggiunto e include un certificato - questo è stato solo lavorando meno di un mese fa. Ripristina le cache del mio simulatore, ora il certificato viene aggiunto ma nessuna opzione per considerarlo completamente affidabile.
Chrisp

3
Nel mio caso, l'opzione "Abilita attendibilità totale per certificato radice" viene visualizzata solo per i certificati radice. Non compare per i certificati intermedi o foglia.
John Girata

1
Ho anche scoperto che il certificato deve avere l'opzione del vincolo di base CA impostata su true: basicConstraints = CA:TRUEquando si genera il certificato utilizzando openssl. Altrimenti non sarà considerato attendibile.
sandinmyjoints

3
Sembra che sulla 12.2 (probabilmente anche nelle versioni precedenti) la procedura ora sia quella di andare su profili generali>, selezionare il certificato e premere installa in alto a destra
MaxPRafferty

23

Ho avuto lo stesso problema per mesi e oggi FINALMENTE l'ho risolto con:

ADVTrustStore

Stai per utilizzare un progetto chiamato ADVTrustStore da GitHub. Fa un po 'di magia ma installerà correttamente i certificati nel tuo truststore root sul simulatore.

Passaggi per installare un certificato personalizzato

# 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

Utilizzando questo processo sono riuscito a ottenere il rendering corretto delle immagini di GoogleStreetView mentre ero dietro un firewall aziendale utilizzando SSL che si dimette con certificati autofirmati

sfondo

Stavo usando CharlesProxy e ho notato che stava installando correttamente i certificati nel simulatore, ma non venivano visualizzati nella sezione Impostazioni - Profili . Poi dopo alcune ricerche ho scoperto questo strumento. Probabilmente ci sono alcuni altri strumenti là fuori, ma nel mio caso il drag-and-drop non ha mai funzionato correttamente per tutti i casi. Safari andrebbe bene ma non le mie applicazioni.


3
SUGGERIMENTO: riavvia il simulatore per installare il nuovo certificato.
Kiko Seijo

1
Questo ha funzionato per me con Xcode 10.1 e il simulatore di iPhone 5s 12.1. Devi solo assicurarti di dire allo script di installare il certificato nel simulatore giusto. Se lo stai usando insieme a badssl.test (cioè badssl in esecuzione localmente nella finestra mobile), dovrai hackerare il .pem per rimuovere tutto tranne il certificato effettivo.
Andrew Ebling

questo mi ha salvato la vita. non c'è quasi nessun supporto della comunità per l'installazione di certificati autofirmati in ios. grazie!
lsimonetti

Confermo che funziona in Simulator 10.3 per iPhone X con iOS 12.4.
Sergei Basharov,


9

Dai un'occhiata allo script di shell che Charles usa per installare il proprio certificato autofirmato nel portachiavi del simulatore. http://www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/

Guarda anche:

Sembra che l'installazione del proprio certificato nel simulatore possa richiedere l'installazione su un dispositivo tramite Safari e quindi la copia della riga risultante dal dispositivo TrustStore.sqlite3a quella del simulatore.


@nailer risposta aggiornata con qualche riferimento in più, per quanto ne so il formato di quei blob in TrustStore.sqlite3 è opaco (e potenzialmente soggetto a modifiche) quindi l'approccio che altri hanno adottato sembra essere quello di installare il certificato su un dispositivo tramite Safari e copiando la riga TrustStore risultante nel loro simulatore.
Jonah

2

Usando iPhone Backup Extractor , ho copiato il mio iPhone TrustStore.sqlite3in ~/Library/Application Support/iPhone Simulator/6.0/Library/Keychains, sovrascrivendo il file esistente. Ho provato a inserire solo una singola riga con il seguente sqlite, ma non sono riuscito a farlo funzionare.

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

Ora, working.sqlha l'intero contenuto della tabella tsettings (nel mio caso, 1 riga).

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

Ancora una volta, i comandi sqlite sopra non hanno funzionato per me, ma potrebbero essere un buon punto di partenza per qualcun altro. Copiare l'intero TrustStore.sqlite3dal backup nel simulatore ha funzionato perfettamente.



0

Il trascinamento della selezione funzionava ma non funzionava su XCode 12 per me. Quello che ha funzionato per me è stato aprire il browser Safari su Simulator e quindi digitare l'URL del file per il file del certificato .crt. Ex.

file:///Users/[folder_path]/[certificate.crt]

Dopodiché devi andare alle impostazioni del simulatore e installare il certificato navigando nella sezione Generale> Profili.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.