Выпуск самоподписанного сертификата с помощью openssl.
Для выпуска сертификата локального домена сначала нужно сгенерировать корневой сертификат, на его основе будут выпускаться все остальные сертификаты.
Для каждого нового уровня домена, нужно будет выпускать свой сертификат. Для теста работы всего этого использовал docker контейнер
nginx:latest
Сформируем закрытый ключ и сертификат центра сертификации. (Certification authority)
|
|
Здесь я определил 2 переменные, чтобы не проходить через интерактивный режим заполнения настроек.
Пояснения по ключам:
openssl help genrsa
openssl 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.
Полезные ссылки: