¿Agregar un certificado autofirmado a iphone Simulator?

87

Tengo un certificado autofirmado en el punto final de mi API. Estoy tratando de probar algunas cosas usando el simulador pero obtengo "certificado de servidor no confiable".

Intenté usar safari en el simulador para descargar el archivo .crt, pero parece que no funciona.

¿De dónde obtiene iPhone Simulator su llavero? ¿Cómo puedo agregar un certificado de confianza para que mi aplicación funcione?

ACTUALIZAR

Lo hice funcionar creando una CA y luego agregando un certificado de CA usando la herramienta de aprovisionamiento de iPhone. Luego pude tener un certificado firmado por ese certificado CA en el servidor API y NSConnection simplemente funcionó. No pude hacer que funcionara con un certificado autofirmado por alguna razón. Necesito volver a intentarlo usando el software de aprovisionamiento.

Mi pregunta real es ¿cómo hago para que esto funcione en el simulador? Creo que el simulador usa el llavero de la computadora real.

jr.
fuente
1
Recientemente llegué a esto con un host en el que confía un certificado CA que se importó al llavero de inicio de sesión en la Mac de desarrollo. (Es decir, mi Safari local confía en el sitio, pero no en el simulador). Me sorprendió que no funcionara con el simulador. ¿Cómo se usa la herramienta de aprovisionamiento de iPhone para manipular los certificados confiables en el simulador?
mpontillo

Respuestas:

113

Solo para información, si alguien aún se encuentra con ese problema:

simplemente arrastre y suelte sus archivos .cer en la ventana del Simulador en ejecución. Verá Safari parpadeando y luego el cuadro de diálogo de importación para su Certificado (o Autoridad de Certificación) ...

Trabajando para iOS 7 Simulator (y creo que también funcionó para iOS 6).

seafoxx
fuente
3
Arrastrar y soltar funciona bien para el simulador de iOS 7. Puedo verificar que NO funciona en los simuladores de iOS 6.0 / 6.1.
John Bowers
2
Soy yo o desde que me actualicé a Xcode 6, esto de arrastrar y soltar ahora solo funciona en la versión iOS 8 del simulador. Probé el simulador de iPhone 5s iOS 7 y iOS 7.1, no pasa nada cuando arrastro el certificado a la ventana del simulador. Y ahora estoy atascado y no puedo probar mi aplicación en nada que no sea iOS 8.
Fred
2
Descubrí una solución para iOS 7 y 7.1: coloque su archivo .cer en un servidor web accesible (agregue el tipo de mime application / x-x509-ca-cert si lo necesita) y use Safari en el simulador para descargar el certificado desde el servidor web. Luego le pedirá que lo instale como si lo hubiera arrastrado y soltado.
Fred
3
Eres un dios, amigo mío
CommaToast
1
¡Eres el hombre! Sabía que tenía que haber una forma rápida de hacer esto.
pqsk
44

Para aquellos que encuentran que arrastrar y soltar el certificado en el simulador no funciona, hubo un cambio reciente que agrega un paso adicional .

Se debe indicar explícitamente al simulador que confíe en la CA raíz. Haga esto yendo a:

General -> Acerca de -> Configuración de confianza del certificado -> "Habilitar la confianza total para el certificado raíz" para su certificado en particular

Vea la respuesta completa aquí :

Gautham C.
fuente
13
La opción "Habilitar plena confianza para el certificado raíz" no está en absoluto en mi simulador con ios 10.3
Jesús Rodríguez
1
¿Alguna vez resolvió este problema: el certificado raíz no aparece en la lista Certificate Trust Settings? Mi perfil se agregó e incluye un certificado; esto solo funcionaba hace menos de un mes. Restablezca las cachés de mi simulador, ahora se agrega el certificado pero no hay opción para confiar plenamente en él.
chrisp
3
En mi caso, la opción "Habilitar la plena confianza para el certificado raíz" aparece solo para los certificados raíz. No aparece para certificados intermedios o hoja.
John Girata
1
También encontré que el certificado debe tener la opción de restricción básica de CA establecida en verdadera: basicConstraints = CA:TRUEal generar el certificado usando openssl. De lo contrario, no aparecerá para ser confiable.
sandinmyjoints
3
Parece que en 12.2 (probablemente versiones anteriores también) el procedimiento ahora es ir a general> perfiles, seleccionar el certificado y presionar instalar en la
esquina
23

Tuve este mismo problema durante meses y hoy FINALMENTE lo resolví con:

ADVTrustStore

Querrás usar un proyecto llamado ADVTrustStore de github. Hace algo de magia elegante, pero instalará correctamente los certificados en su almacén de confianza raíz en el simulador.

Pasos para instalar un certificado personalizado

# 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

Usando este proceso pude hacer que las imágenes de GoogleStreetView se renderizaran correctamente mientras estaba detrás de un firewall corporativo usando SSL renunciando con certificados autofirmados

Antecedentes

Estaba usando CharlesProxy y noté que estaba instalando correctamente los certificados en el Simulador, pero no aparecían en la sección Configuración - Perfiles . Luego, después de buscar, descubrí esta herramienta. Probablemente existan algunas otras herramientas, pero en mi caso, la función de arrastrar y soltar nunca funcionó correctamente en todos los casos. Safari estaría bien, pero no mis aplicaciones.

Jeef
fuente
3
SUGERENCIA: reinicie el simulador para instalar el nuevo certificado.
Kiko Seijo
1
Esto me sirvió con el simulador de Xcode 10.1 y iPhone 5s 12.1. Solo debes asegurarte de decirle al script que instale el certificado en el simulador correcto. Si está utilizando esto junto con badssl.test (es decir, badssl ejecutándose localmente en la ventana acoplable), deberá piratear el .pem para eliminar todo excepto el certificado real.
Andrew Ebling
esto me salvó la vida. casi no hay soporte de la comunidad para instalar certificados autofirmados en ios. ¡gracias!
lsimonetti
Confirmo que funciona en Simulator 10.3 para iPhone X con iOS 12.4.
Sergei Basharov
9

Eche un vistazo al script de shell que Charles usa para instalar su certificado autofirmado en el llavero del simulador. http://www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/

Ver también:

Parece que instalar su propio certificado en el simulador puede requerir instalarlo en un dispositivo a través de Safari y luego copiar la fila resultante del dispositivo TrustStore.sqlite3en la del simulador.

Jonás
fuente
La respuesta de @nailer se actualizó con algunas referencias más, hasta donde yo sé, el formato de esos blobs en TrustStore.sqlite3 es opaco (y potencialmente sujeto a cambios), por lo que el enfoque que otros han adoptado parece ser instalar el certificado en un dispositivo a través de Safari y copiando la fila TrustStore resultante en su simulador.
Jonás
9

Para cualquiera que use OS X Catalina, verifique esto: https://forums.developer.apple.com/thread/124056 .

Catalina actualmente está bloqueando el acceso a la carpeta Escritorio, Documentos y Descargas. Moví los archivos de certificado a la carpeta compartida y arrastré y solté los archivos al simulador desde allí.

Caballero Caballería
fuente
3
Dios te conceda salud :)
Booharin
2

El uso de iPhone de copia de seguridad Extractor , he copiado de mi iPhone TrustStore.sqlite3en ~/Library/Application Support/iPhone Simulator/6.0/Library/Keychains, sobrescribir el archivo existente. Intenté insertar solo una fila con el siguiente sqlite, pero no pude hacerlo funcionar.

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

Ahora, working.sqltiene todo el contenido de la tabla tsettings (en mi caso, 1 fila).

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

Nuevamente, los comandos sqlite anteriores no funcionaron para mí, pero podrían ser un buen punto de partida para otra persona. Copiar todo TrustStore.sqlite3desde la copia de seguridad en el simulador funcionó bien.

Heath Borders
fuente