Самоподписные сертификаты для iOS
Как известно 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 или ваше приложение)
После этих манипуляций все должно заработать.