Как установить самоподписанные сертификаты в iOS 11

Я использую самозаверяющие сертификаты во внутренней сети своего небольшого офиса, и после обновления до iOS 11 сертификаты у меня не работают. (Chrome и другие браузеры им довольны.)

Я получил свой самоподписанный корневой файл CA, преобразовал его в файл .der и установил на свой iPad через Интернет.

ipad с сертификатом

Но в отличие от этого Ответа, я не вижу свой сертификат корневого ЦС в настройках > Общие > О программе > Доверие к сертификату.

нет сертификата??

Существуют ли какие-либо ограничения для сертификатов, которым можно доверять в iOS? У моего iPhone и iPad есть эта проблема. Что-то не так в моей процедуре?

Я использовал эти коды, чтобы сделать свой сертификат ЦС.

openssl genrsa -des3 -out rootCA.key 4096

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt

openssl x509 -in rootCA.crt -out cert.der -outform DER

person Community    schedule 22.03.2018    source источник


Ответы (3)


Если вы не видите сертификат в разделе «Общие» -> «О программе» -> «Настройки доверия сертификатов», возможно, у вас не установлен корневой ЦС. Очень важно - должен быть КОРНЕВОЙ ЦС, а не промежуточный ЦС.

Это очень легко определить с помощью openssl:

$ openssl s_client -showcerts -connect myserver.com:443 </dev/null

Это покажет вам вывод для сертификатов в цепочке сертификатов, что-то вроде этого:

    Certificate chain
     0 s:/C=US/ST=California/L=SAN FRANCISCO/O=mycompany.com, inc./OU=InfraSec/CN=myserver.com
       i:/C=US/O=mycompany.com, inc./CN=mycompany.com Internal CA 1A
    -----BEGIN CERTIFICATE-----
    ....encoded cert in PEM format....
    -----END CERTIFICATE-----

И он должен показать цепочку сертификатов вплоть до ROOT CA. Продолжайте следить за выводом, обращая внимание на значение «i:», которое указывает ISSUER. Наконец, вы должны добраться до ROOT CA и можете просто скопировать и вставить его в файл .pem (обязательно включите строки BEGIN CERTIFICATE и END CERTIFICATE!). Теперь вы сможете установить его на свой симулятор, перетащив его в окно симулятора.

Если вашего ROOT CA нет в списке, найдите верхний уровень в выходных данных, а затем экспортируйте его из Keychain Access.app. Это предполагает, что вы можете зайти на веб-сайт через Safari/Chrome, поэтому сначала вам придется вручную доверять веб-сайту.

Мой вывод «openssl s_client» закончился последним сертификатом, показанным с таким эмитентом:

i:/C=US/O=mycompany.com, inc./CN=mycompany.com Внутренний корневой центр сертификации 1

Я могу успешно попасть на целевой веб-сайт через Safari/Chrome, так что это означает, что Keychain сохранил его и доверяет ему. Итак, я только что запустил Keychain Access.app через Spotlight и набрал «mycompany» в строке поиска. Он показал мой сертификат (вид = сертификат) для «mycompany.com Internal Root CA 1». Я просто щелкнул правой кнопкой мыши и выбрал «Экспорт» и сохранил его в файле .cer.

Вуаля! Теперь я могу перетащить его на свой симулятор, и ROOT CA появится в разделе General-> About..., и я могу включить его.

Если по какой-то причине вам нужно преобразовать файл PEM в DER/CER, просто используйте эту команду:

$ openssl x509 -in myfile.pem -out myfile.der -outform DER

Надеюсь, это поможет, мне приходилось делать это десятки раз, и я решил, что пришло время записать несколько заметок, чтобы я не забыл.

person DustinB    schedule 26.09.2018

Очевидно, ios не любит сертификаты без общего имени, поэтому просто создайте его заново с непустым CN, и он появится в списке корневых сертификатов.

person m1r1k    schedule 25.04.2018
comment
У меня была та же проблема, что и у OP, и даже включение всех параметров в сертификат не приводит к ее появлению. - person David Corbin; 09.09.2018

Просто используйте следующую команду, затем сбросьте или отправьте себе этот сертификат по электронной почте. Не забудьте ответить на все вопросы, когда увидите подсказки

openssl genrsa -out privatekey.pem 1024
openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 1825
openssl pkcs12 -export -out public_privatekey.pfx -inkey privatekey.pem -in publickey.cer

У меня была такая же проблема, пока я не использовал эту команду. Я не знаю, почему это происходит, но команда работает. Ваше здоровье!

person Andrew Shatnyy    schedule 17.10.2018
comment
Файлы pfx/pcks12 содержат закрытый ключ вместе с сертификатами. Я не думаю, что вы действительно хотите помещать закрытый ключ своего центра сертификации в свое устройство. Использование формата PEM или DER должно работать нормально, если это не так, то в первую очередь что-то не так с тем, как вы создали ЦС. - person adam; 06.01.2020
comment
Эта команда работает для сценариев, когда мне нужен прокси-сервер MITM для отладки сети. Я бы не использовал эту команду ни для чего другого. если они этого не делают, то что-то не так с тем, как вы создали ЦС, в первую очередь, что связано с самозаверяющим ЦС. - person Andrew Shatnyy; 08.01.2020