Для запуска внутренних или тестовых HTTPS веб-сервисов можно использовать самоподписанные сертификаты. В качестве TLS сертификата можно использовать платный сертификат от коммерческого CA или выпустить бесплатный доверенный сертификат Let’s Encrypt. В этой статье мы рассмотрим, как с помощью утилиты OpenSSL выпустить самоподписанный сертификат в Linux, привязать его к веб серверу Nginx и добавить в доверенные на компьютере пользователя.
В данном случае я хочу добавить в сертификат полное имя webportal.loc и IP адрес 10.10.1.24.
Сначала нужно выпустить ключ и сертификат для своего корневого CA, с помощью которого мы будем подписывать свои сертификаты:
# mkdir ~/selfsign && cd ~/selfsign
# openssl ecparam -out myCA.key -name prime256v1 -genkey
# openssl req -x509 -new -nodes -key myCA.key -sha256 -days 9999 -out myCA.crt
Появится ряд вопросов, на которые можно ответить произвольно.
Затем выпустите ключ и сертификат для веб сервера:
# openssl genrsa -out webportal.loc.key 2048
# openssl req -new -key webportal.loc.key -out webportal.loc.csr
Подготовьте конфигурационный файл-запрос на получение сертификата:
# nano webportal.loc.ext
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] IP.1 = 10.10.1.24 DNS.1 = webportal.loc
Теперь можно сгенерировать самоподписанный сертификат со сроком жизни 5 лет (1825 дней)
# openssl x509 -req -in webportal.loc.csr -CA myCA.crt -CAkey myCA.key -CAcreateserial -out webportal.loc.crt -days 1825 -sha256 -extfile webportal.loc.ext
Теперь можно установить сертификат и ключ на веб сервер Nginx.
# mkdir /etc/nginx/certs
# cp webportal.loc.crt /etc/nginx/certs/.
# cp webportal.loc.key /etc/nginx/certs/.
Сгенерировать файл dhparam для Nginx:
# openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Настройте параметры сертификата в конфигурационном файле Nginx для целевого виртуального хоста:
http2 on; server_name webportal.loc 10.10.1.24; ssl_certificate /etc/nginx/certs/webportal.loc.crt; ssl_certificate_key /etc/nginx/certs/webportal.loc.key; ssl_dhparam /etc/ssl/certs/dhparam.pem;
Перезапуск Nginx:
# nginx -t
# nginx -s reload
Чтобы сделать самоподписанный сертификат доверенным на клиентском компьютере с Linux, скопируйте его в указанный каталог и обновите конфигурацию:
# cp myCA.crt /usr/local/share/ca-certificates/.
# update-ca-certificates
Если нужно добавить корневой сертификат вашего самоподписанного CA в доверенные на компьютере с Windows, скопируйте его с помощью утилиты scp:
scp sysops@192.168.15.31:/home/sysops/selfsign/myCA.crt c:\ps\myCA.crt
Добавьте сертификат в доверенные сертификаты пользователя с помощью команды:
certutil -user -addstore "Root" c:\ps\myCA.crt
Откройте хранилище сертификатов certmgr.msc
и проверьте, что ваш корневой CA теперь установлен в хранилище «Trusted Root Certification Authorities».
Теперь клиент при доступе к сайту (по имени или IP) на веб сервере Nginx будет считать установленный самоподписанный сертификат доверенным и не будет выдавать предупреждение.
1 comment
Спасибо. Буду знать.