Выпуск самоподписанного сертификата с помощью openssl.
Для выпуска сертификата локального домена сначала нужно сгенерировать корневой сертификат, на его основе будут выпускаться все остальные сертификаты.
Для каждого нового уровня домена, нужно будет выпускать свой сертификат. Для теста работы всего этого использовал docker контейнер
nginx:latest
Сформируем закрытый ключ и сертификат центра сертификации. (Certification authority)
|
|
Здесь я определил 2 переменные, чтобы не проходить через интерактивный режим заполнения настроек.
Пояснения по ключам:
openssl help genrsaopenssl help req
Сформируем запрос на сертификат - csr (Certificate Signing Request), на основе ключа:
|
|
При последующих генерациях запросов на сертификат не нужно создавать новый ключ, можно использовать уже сгенерированный, использовав вместо параметра
-keyoutпараметр-key.
Пояснения по ключам:
openssl help req
Понадобится создать файл с параметрами, чтобы передать их openssl. Подробнее тут.
|
|
Выпустим сертификат:
|
|
Теперь серфтикат и ключ можно использовать, для nginx это выглядит так:
|
|
Нужно чтобы была dns-запись, связывающая ip-адрес и имя
dodcaf.sweethome. Для теста это можно решить добавлением строки в/etc/hosts.
Так же нужно добавить CA сертификат в браузер:
google chrome:Настройки - Конфиденциальность и безопасность - Безопасность - Настроить сертификаты - выбрать Центры сертификации - импорт - выбратьrootCA.pem.firefox:Settings - Privacy & Security - View Certificates - Authorities - Import - выбратьrootCA.pem- перезапустить firefox.
Можно ограничить вход только тем, у кого есть сертификат. Для этого нужно изменить конфиг nginx следующим образом:
|
|
Проверим - работает. Порт 8443 указан, т.к. nginx запущен внутри docker контейнера и наружу выброшен этот порт. Перед curl стоит sudo, т.к. папка volume мапится из контейнера и в ней файлы с UID и GUID равны 0.
|
|
Для работы из браузера нужно сделать единый .p12 файл, который будет содержать в себе: сертификат клиента, ключ клиента и сертификат CA. Я не стал генерировать новые ключ и сертификат для клиента.
|
|
Так же нужно поменять владельца на системного пользователя. У моего UID=1000, поменяю права из контейнера:
|
|
Так же нужно добавить CA сертификат в браузер:
google chrome:Настройки - Конфиденциальность и безопасность - Безопасность - Настроить сертификаты - выбрать Ваши сертификаты - импорт - выбратьdodcaf.sweethome-client01.p12- ввести пароль.firefox:Settings - Privacy & Security - View Certificates - Your Certificates - Import - выбратьdodcaf.sweethome-client01.p12- ввести пароль - перезапустить firefox.
Полезные ссылки: