03.02.2020 14:35

Добавление доверенного SSL-сертификата для локальной среды в Nginx на Debian/Ubuntu (используя корневой ЦС)

В этой статье я объясню, как добавить доверенный SSL-сертификат для локальной среды разработки в Nginx сервер на операционной системе Debian/Ubuntu. Я всегда использую HTTPS протокол для локальной среды разработки. Но браузер отображает уведомление о том, что он не доверяет самоподписанному (самозаверяющему) SSL-сертификату. Я уже писал статью о том, как добавить доверенный самоподписанный SSL-сертификат в Nginx на Debian/Ubuntu, но это решение не всегда работает. В какой-то момент у меня снова возникли ошибки в браузерах: NET::ERR_CERT_AUTHORITY_INVALID (Google Chrome), MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT (Firefox). Возможно, после обновления системы произошли какие-то изменения. И снова мне пришлось разбираться, как решить эту проблему. На этот раз мы будем использовать корневой центр сертификации (ЦС). Я надеюсь, что эта улучшенная инструкция поможет вам тоже.

Эта инструкция была выполнена на операционных системах: Debian 10, Debian 9, Ubuntu 20.10, Ubuntu 20.04, Ubuntu 19.10.

Создание конфигурации OpenSSL

Давайте начнем с этого важного раздела. Нам нужно создать файл конфигурации для OpenSSL, выполнив команду в терминале:

nano /tmp/openssl.cnf

Скопируйте и вставьте следующую подготовленную конфигурацию в новый файл, где DNS.1 — это название вашего сервера (укажите DNS.2, если вам нужна поддержка поддоменов):

[req]
default_bits = 2048
distinguished_name = req_distinguished_name
prompt = no

[req_distinguished_name]
C = US
ST = New York
L = Rochester
O = Localhost CA
OU = Development
CN = localhost

[v3_ca]
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
# Support subdomains
#DNS.2 = *.domain.local

Сохраняем изменения и закрываем файл.

Создание корневого центра сертификации (ЦС)

Мы будем использовать корневой центр сертификации (ЦС) для создания всех SSL-сертификатов. Но сначала нам нужно создать корневой сертификат. Давайте создадим приватный ключ rootCA.key, выполнив команду в терминале:

sudo openssl genrsa -out /etc/ssl/private/rootCA.key 2048

или используя парольную фразу

sudo openssl genrsa -des3 -out /etc/ssl/private/rootCA.key 2048

Теперь давайте создадим файл сертификата rootCA.pem, используя приватный ключ rootCA.key, выполнив команду в терминале:

sudo openssl req -x509 -new -nodes -key /etc/ssl/private/rootCA.key -sha256 -days 3650 -out /etc/ssl/certs/rootCA.pem

В процессе генерации сертификата будет задано несколько вопросов. Вы можете пропустить их:

Создание корневого центра сертификации

Создание SSL-сертификатов

Уже можно создавать новые сертификаты, используя корневой сертификат rootCA.pem. Но сначала нам нужно создать приватный ключ и ключ (CSR) для запроса подписи, выполнив команду в терминале:

sudo openssl req -new -sha256 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/localhost.key -out /etc/ssl/private/localhost.csr -config /tmp/openssl.cnf

Теперь мы создадим наш файл сертификата, используя корневой центр сертификации, который мы создали ранее, запустив команду в терминале:

sudo openssl x509 -req -in /etc/ssl/private/localhost.csr -CA /etc/ssl/certs/rootCA.pem -CAkey /etc/ssl/private/rootCA.key -CAcreateserial -out /etc/ssl/certs/localhost.crt -sha256 -days 3650 -extfile /tmp/openssl.cnf -extensions v3_ca

Создание SSL-сертификатов

Настройка Nginx для использования SSL

Давайте включим SSL в конфигурации сервера Nginx. Мы укажем прослушивание порта 443 (HTTPS) и пути к файлам сертификата и приватного ключа. Отредактируем файл конфигурации сервера /etc/nginx/sites-available/default:

sudo nano /etc/nginx/sites-available/default
server {
	listen 80 default_server;
	listen [::]:80 default_server;

	listen 443 ssl default_server;
	listen [::]:443 ssl default_server;

	ssl_certificate /etc/ssl/certs/localhost.crt;
	ssl_certificate_key /etc/ssl/private/localhost.key;

	root /var/www/html;
	index index.html index.htm index.nginx-debian.html;

	server_name _;

	location / {
		try_files $uri $uri/ =404;
	}
}

Сохраняем изменения и закрываем файл. Проверим конфигурацию на валидность, выполнив команду в терминале:

sudo nginx -t

Теперь применим изменения конфигурации, выполнив команду в терминале:

sudo service nginx reload

Добавление центра сертификации в браузер

Чтобы браузер доверял созданным сертификатам, вы должны добавить свой корневой центр сертификации rootCA.pem в список доверенных центров сертификации браузера:

Добавление центра сертификации в браузер

Выберите корневой центр сертификации rootCA.pem

Установите все параметры доверия для корневого центра сертификации rootCA.pem

Центр сертификации будет называться как "Internet Widgits Pty Ltd". Если вы захотите отредактировать настройки доверия или удалить ЦС, ищите по этому названию.

Тестирование шифрования

Давайте проверим, что наш сервер доступен по протоколу HTTPS, введя следующий адрес в браузере:

https://localhost

Если вы все сделали правильно, вы увидите, что браузер начал доверять вашему SSL сертификату. Теперь ваше соединение будет зашифровано с использованием протокола HTTPS без отображения предупреждения о незащищенном соединении:

Страница приветствия Nginx с надежным SSL

Другие статьи