Добавление самозаверяющего сертификата в симулятор iphone?

87

У меня есть самозаверяющий сертификат в конечной точке моего API. Я пытаюсь протестировать некоторые вещи с помощью симулятора, но получаю «сертификат ненадежного сервера».

Я пытался использовать сафари на симуляторе, чтобы загрузить файл .crt, но, похоже, это не сработало.

Откуда в iPhone Simulator брелок для ключей? Как я могу добавить доверенный сертификат, чтобы мое приложение работало?

ОБНОВИТЬ

Я заставил его работать, создав ЦС, а затем добавив сертификат ЦС с помощью инструмента подготовки iPhone. Затем я смог получить сертификат, подписанный этим сертификатом CA на сервере API, и NSConnection просто заработал. Мне по какой-то причине не удалось заставить его работать, используя самоподписанный сертификат. Мне нужно повторить попытку с помощью программного обеспечения для подготовки.

Мой настоящий вопрос в том, как заставить это работать на симуляторе? Я бы подумал, что в симуляторе используется связка ключей реального компьютера.

младший
источник
1
Недавно я столкнулся с этим с хостом, которому доверяет сертификат CA, который был импортирован в цепочку ключей входа на Mac разработки. (То есть мой местный Safari доверяет сайту, но не симулятору.) Я был удивлен, что он не работал с симулятором. Как использовать инструмент подготовки iPhone для управления доверенными сертификатами в симуляторе?
mpontillo

Ответы:

113

Просто для информации, если кто-то все еще сталкивается с этой проблемой:

просто перетащите файлы .cer в окно работающего симулятора. Вы увидите мигающий Safari, а затем диалоговое окно импорта для вашего сертификата (или центра сертификации) ...

Работает для iOS 7 Simulator (и я думаю, что работал и для iOS 6).

Seafoxx
источник
3
Перетаскивание отлично работает для симулятора iOS 7. Я могу проверить, что это НЕ работает на симуляторах iOS 6.0 / 6.1.
Джон Бауэрс
2
это я или с тех пор, как я перешел на Xcode 6, эта функция перетаскивания теперь работает только с версией симулятора iOS 8. Пробовал симулятор iPhone 5s iOS 7 и iOS 7.1, ничего не происходит, когда я перетаскиваю сертификат в окно симулятора. А теперь я застрял и не могу протестировать свое приложение ни на чем, кроме iOS 8.
Фред
2
Выяснил обходной путь для iOS 7 и 7.1: поместите файл .cer на доступный веб-сервер (добавив mime-тип application / x-x509-ca-cert, если он нужен) и используйте Safari на симуляторе для загрузки сертификата. с веб-сервера. Затем он попросит вас установить его, как если бы вы его перетащили.
Фред
3
Ты бог, мой друг
CommaToast
1
Ты мужчина! Я знал, что это должен быть быстрый способ сделать это.
pqsk 05
44

Для тех, кто обнаруживает, что перетаскивание сертификата в симуляторе не работает, недавно было внесено изменение, которое добавляет дополнительный шаг .

Симулятору необходимо явно указать доверять корневому ЦС. Сделайте это, перейдя:

Общие -> О программе -> Настройки доверия к сертификату -> «Включить полное доверие для корневого сертификата» для вашего конкретного сертификата

Смотрите полный ответ здесь :

Гаутам К.
источник
13
Параметр «Включить полное доверие для корневого сертификата» вообще отсутствует на моем симуляторе под управлением iOS 10.3
Хесус Родригес,
1
Вы когда-нибудь решали эту проблему - корневой сертификат не указан в списке Certificate Trust Settings? Добавлен Мой профиль и включает в себя сертификат - это просто работает меньше , чем месяц назад. Сбросьте мои кеши симулятора, теперь сертификат добавлен, но нет возможности полностью доверять ему.
chrisp
3
В моем случае опция «Включить полное доверие для корневого сертификата» отображается только для корневых сертификатов. Он не отображается для промежуточных или конечных сертификатов.
Джон Гирата
1
Я также обнаружил, что для сертификата должна быть установлена ​​опция базового ограничения CA, равная true: basicConstraints = CA:TRUEпри создании сертификата с использованием openssl. В противном случае ему не будут доверять.
sandinmyjoints
3
Похоже, что в версии 12.2 (возможно, и в более ранних версиях) теперь нужно перейти к общим> профилям, выбрать сертификат и нажать
кнопку «
23

У меня была такая же проблема в течение нескольких месяцев, и сегодня я НАКОНЕЦ решил ее:

ADVTrustStore

Вы захотите использовать проект под названием ADVTrustStore из github. Он творит какую-то причудливую магию, но он правильно устанавливает сертификаты в ваше корневое хранилище доверенных сертификатов на симуляторе.

Шаги по установке специального сертификата

# 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

Используя этот процесс, я смог заставить изображения GoogleStreetView правильно отображаться, находясь за корпоративным брандмауэром, используя SSL, отказавшись от самозаверяющих сертификатов.

Задний план

Я использовал CharlesProxy и заметил, что сертификаты правильно устанавливаются в симулятор, но они не отображаются в разделе « Настройки» - «Профили ». Затем после некоторых поисков я обнаружил этот инструмент. Вероятно, есть еще несколько инструментов, но в моем случае перетаскивание никогда не работало правильно во всех случаях. Safari подойдет, но не мои приложения.

Джиф
источник
3
СОВЕТ: перезапустите симулятор, чтобы установить новый сертификат.
Kiko Seijo
1
Это помогло мне с симулятором Xcode 10.1 и iPhone 5s 12.1. Вам просто нужно убедиться, что вы указали сценарию для установки сертификата в правильном симуляторе. Если вы используете это вместе с badssl.test (т.е. badssl работает локально в докере), вам нужно будет взломать .pem, чтобы удалить все, кроме самого сертификата.
Эндрю Эблинг
это спасло мне жизнь. Сообщество почти не поддерживает установку самоподписанных сертификатов в iOS. Спасибо!
lsimonetti
Я подтверждаю, что он работает в Simulator 10.3 для iPhone X с iOS 12.4.
Сергей Башаров
9

Взгляните на сценарий оболочки, который Чарльз использует для установки самоподписанного сертификата в связку ключей симулятора. http://www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/

Смотрите также:

Похоже, что для установки вашего собственного сертификата в симуляторе может потребоваться установить его на устройстве через Safari, а затем скопировать полученную строку с устройства TrustStore.sqlite3в симулятор.

Иона
источник
Ответ @nailer обновлен еще несколькими ссылками, насколько я знаю, формат этих блобов в TrustStore.sqlite3 непрозрачен (и потенциально может быть изменен), поэтому подход, принятый другими, похоже, заключается в установке сертификата на устройство через Safari и копирование полученной строки TrustStore в свой симулятор.
Иона
9

Для тех, кто использует OS X Catalina, проверьте это: https://forums.developer.apple.com/thread/124056 .

Каталина в настоящее время блокирует доступ к рабочему столу, папке «Документы» и «Загрузки». Я переместил файлы сертификатов в общую папку и перетащил файлы в симулятор оттуда.

РыцарьКавалерия
источник
3
Дай бог здоровья :)
Бухарин
2

Использование iPhone резервного Extractor , я скопировал мой iPhone в TrustStore.sqlite3INTO ~/Library/Application Support/iPhone Simulator/6.0/Library/Keychains, перезаписывать существующий файл. Я попытался вставить только одну строку со следующим sqlite, но мне не удалось заставить его работать.

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

Теперь working.sqlесть все содержимое таблицы tsettings (в моем случае 1 строка).

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

Опять же, приведенные выше команды sqlite не работали для меня, но могут быть хорошей отправной точкой для кого-то другого. Копирование всего TrustStore.sqlite3из резервной копии в симулятор работало нормально.

Heath Borders
источник