Я настаивал на этом, пытаясь заставить iOS принять самоподписанный сертификат в качестве единственного источника правды. Я должен обойти это, выдав соответствующий личный центр сертификации. Заставить iOS доверять этому авторитету. А затем подписать веб-сайт сертификатом, утвержденным этим органом.
Я опишу необходимые команды, поскольку они могут сэкономить кому-то пару часов. Ниже приведен «птичий глаз» того, что мы будем делать.
AUTHORITY - это будет источником доверия для всех сертификатов, которые вы подписываете. Вам нужно будет установить Authority на каждый компьютер / телефон, который вам нужен, с настраиваемыми сертификатами
- . Сгенерировать закрытый ключ для центра сертификации (CA).
- . Сгенерировать сертификат для центр сертификации (ЦС)
- установить центр сертификации на Windows
- установить центр сертификации на iOS
КЛИЕНТ - мы может выдавать закрытые ключи для всех наших проектов в нашей сети. Эти закрытые ключи будут проверены нашими собственными сгенерированными и установленными полномочиями.
- Создание личного ключа для клиента
- Создание запроса на подпись сертификата (CSR)
- Попросите CA подписать CSR, создав, таким образом, сертификат клиента
- . Объедините сертификат клиента и сертификат CA в файл pkcs12, который будет считан Spring
Теперь для фактические команды:
Сгенерируйте закрытый ключ, мы также будем использовать идентичную команду для генерации ключа для клиента:
openssl genrsa -des3 -out myCA.key 2048
Сгенерируйте сертификат для вашего центра сертификации. Вам будет задано несколько вопросов, ни один из которых не имеет значения, они будут служить только для идентификации вашего сертификата.
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1825 -out myCA.pem
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1825 -out myCA.crt
Теперь у вас есть три файла. MyCA.key (закрытый ключ) и myCA.pem и myCA.crt, которые являются файлом сертификата для вашего центра сертификации.
Установить на Windows: Нажмите myCA.crt
файл на Windows и следуйте инструкциям на экране. Затем нажмите Пуск -> Выполнить -> `` certmgr.msc`. Откроется диспетчер сертификатов * 1092. Сертификат, который вы установили, находится в разделе «Промежуточные центры сертификации». Вам нужно перетащить этот файл в «Доверенные Root центры сертификации».
Установить на iOS: Отправить файл myCA.pem
по электронной почте. Откройте письмо на iOS с помощью приложения Apple Mail. Следуйте инструкциям и сертификат будет установлен. Для удаления вы можете go в Настройки -> Общие -> Профиль. После правильной установки iOS требуется второй шаг для доверия сертификату, необходимо go в Настройки -> Общие -> О программе -> Настройки доверия сертификата и Включить полное доверие для Root Сертификат.
Теперь у вас есть локальный CA (центр сертификации), установленный как на вашем компьютере Windows, так и на вашем телефоне iOS. Позволяет создать сертификат веб-сайта.
Создать закрытый ключ для веб-сайта.
openssl genrsa -des3 -out myWebsite.key 2048
Создать CSR (запрос знака сертификата):
openssl req -new -key myWebSite.key -out myWebsite.csr
Теперь, когда у нас есть ключ веб-сайта и запрос на подпись сертификата, нам нужно создать файл конфигурации, который openssl будет использовать для создания сертификата нашего веб-сайта . Создайте файл с именем myWebsite.ext
со следующей информацией. Единственное, что вы должны убедиться, это альтернативные имена. Вы можете иметь как IP-адреса, так и DNS. Обязательно введите все альтернативы, которые будет использовать ваш сайт.
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = mywebsite
DNS.3 = mywebsite.local
IP.1 = 10.1.1.3
IP.2 = 127.0.0.1
Теперь мы будем использовать сертификат CA и закрытый ключ вместе с CSR (Certificate Sign Request) и файлом конфигурации для генерации правильного сертификат для сайта. Так как iOS 13 Apple разрешает максимум 825 дней на сертификаты, так что это то, что мы будем использовать.
openssl x509 -req -in myWebsite.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out myWebsite.crt -days 825 -sha256 -extfile myWebsite.ext
Теперь у вас будут следующие файлы:
myCA.key - certificate authority private key
myCA.pem - certificate authority certificate pem format
myCA.crt - certificate authority certificate crt format
myWebsite.key - website private key
myWebsite.csr - website certificate sign request
myWebsite.ext - website config file for openssl sign request
myWebsite.crt - website certificate crt format
Единственное, чего не хватает, это преобразовать myWebsite.crt в формат p12, что мы можем сделать с помощью следующей команды:
openssl pkcs12 -export -in myCA.crt -inkey myCA.key -in myWebsite.crt -inkey myWebsite.key -name myWebsite -out myWebsite.p12
Теперь, чтобы Spring Boot использовал этот сертификат, просто откройте файл application.properties
и убедитесь, что в нем есть следующие строки:
server.ssl.key-store-type=PKCS12
# The path to the keystore containing the certificate, place it src/main/resources
server.ssl.key-store=classpath:myWebsite.p12
# The password used to generate the certificate
server.ssl.key-store-password=PASSWORD-USED
# The alias mapped to the certificate (the -name myWebsite on the last command)
server.ssl.key-alias=myWebsite
# force SSL
security.require-ssl=true
И вот он у вас. Dev или внутренний проект с надлежащей проверкой SSL. Надеюсь, это сэкономит кому-то время.