Spring Boot SSL веб-приложение iOS тестирование - PullRequest
0 голосов
/ 04 марта 2020

Я экспериментирую с Spring Boot для создания WebApp.

Чтобы создать сертификат SSL, я ввожу следующую команду:

keytool -alias devssl -keystore devssl.p12 -genkeypair -keyalg RSA -sigalg SHA256withRSA /
-keysize 2048 -storetype PKCS12 -validity 365 -dname "CN=Frankie, OU=Frankie O=Frankie, /
L=City, S=State, C=UK" -ext SAN=DNS:localhost,DNS:blueye,IP:127.0.0.1,IP:10.1.1.2"

Что из того, что я могу понять, означает что такой сертификат будет действителен для следующих адресов:

  • localhost
  • blueye
  • 127.0.0.1
  • 10.1.1.2

Сертификат очень легко установить в Spring:

server.ssl.key-store-type=PKCS12
server.ssl.key-store=devssl.p12
server.ssl.key-store-password=password
server.ssl.key-alias=devssl
security.require-ssl=true

После установки сертификата в Trusted Root Центры сертификации в Windows он также отлично работает.

Я просто не могу заставить его работать под iOS.

Я отправляю себе сертификат по электронной почте.
Устанавливаю его на iPhone.
Но я всегда получите «это соединение не является частным».

enter image description here

Есть идеи, как заставить эту работу работать на iOS?

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Я настаивал на этом, пытаясь заставить iOS принять самоподписанный сертификат в качестве единственного источника правды. Я должен обойти это, выдав соответствующий личный центр сертификации. Заставить iOS доверять этому авторитету. А затем подписать веб-сайт сертификатом, утвержденным этим органом.

Я опишу необходимые команды, поскольку они могут сэкономить кому-то пару часов. Ниже приведен «птичий глаз» того, что мы будем делать.

AUTHORITY - это будет источником доверия для всех сертификатов, которые вы подписываете. Вам нужно будет установить Authority на каждый компьютер / телефон, который вам нужен, с настраиваемыми сертификатами

  1. . Сгенерировать закрытый ключ для центра сертификации (CA).
  2. . Сгенерировать сертификат для центр сертификации (ЦС)
  3. установить центр сертификации на Windows
  4. установить центр сертификации на iOS

КЛИЕНТ - мы может выдавать закрытые ключи для всех наших проектов в нашей сети. Эти закрытые ключи будут проверены нашими собственными сгенерированными и установленными полномочиями.

  1. Создание личного ключа для клиента
  2. Создание запроса на подпись сертификата (CSR)
  3. Попросите CA подписать CSR, создав, таким образом, сертификат клиента
  4. . Объедините сертификат клиента и сертификат 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. Надеюсь, это сэкономит кому-то время.

0 голосов
/ 02 мая 2020

Похоже, у вас возникли проблемы с созданием сертификатов правильно, для отличного руководства о том, как это сделать, проверьте:

https://jamielinux.com/docs/openssl-certificate-authority/introduction.html

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

https://github.com/eamonwhiter73/IOSObjCWebSockets

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