Самоподписные сертификаты для iOS

Самоподписные сертификаты для iOS

04.05.2021 0 Автор Vovanys

Как известно iOS любит параноить и имеет много свои правил. Одно из них самоподписанные сертфикаты.

Попробуем выпустить серты согласно доке

Выпуск состоит из нескольких шагов:

  • Создание своего CA
  • Выпуск реквеста
  • Подписание серта своим CA (удостоверяющим центром)

Для этого понадобиться openssl.

Создаем 2 файла

CA.cnf

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
req_extensions = v3_req
prompt = no

[req_distinguished_name]
C = RU
ST = MO
L = Moscow
O = Vovanys INC
OU = IT
CN = Vovanys INC

[ v3_req ]
basicConstraints = CA:TRUE
keyUsage = critical, keyCertSign
extendedKeyUsage = serverAuth

req.cnf

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
req_extensions = v3_req
prompt = no

[req_distinguished_name]
C = RU
ST = MO
L = Moscow
O = Vovanys INC
OU = IT
CN = demo.vovanys.com

[v3_req]
basicConstraints=CA:FALSE
keyUsage = critical, digitalSignature
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = demo.vovanys.com
IP.1 = 192.168.0.8

DNS.1 обязательно к заполнению. Это указано в доке с условием TLS server certificates must present the DNS name of the server in the Subject Alternative Name extension of the certificate. DNS names in the CommonName of a certificate are no longer trusted.

Далее переходим в теминале в папку где лежат эти 2 файла и даем команды

#создаем ключ
openssl genrsa -out rootCA.key 4096

#создаем сертификат CA

openssl req -x509 -new -key rootCA.key -days 800 -out rootCA.crt -sha256 -config CA.cnf

#делаем файл запроса (срок большой ставить не стоит т.к. TLS server certificates must have a validity period of 825 days)

openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -keyout demo.key -out demo.csr -config req.cnf

#подписываем и получаем сам сертификат
openssl x509 -sha256 -req -in demo.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out demo.crt -days 365 -extfile req.cnf -extensions v3_req

Далее получившийся файл rootCA.crt отправляем на iOS устройство (почтой, файлом как угодно). Нажимем на него в вашем девайсе, переходим в Настройки — Профили. Выбираем его и нажимаем установить.

Далее переходим в Настройки — О телефоне (About) — Сертификаты и ставим переключатель в режим доверять.

Файлы demo.crt и demo.key уставливаем на сам вебсервер (nginx, apache или ваше приложение)

После этих манипуляций все должно заработать.