11.11.2019 08:40 24.04.2020 14:35

Добавление самоподписанного SSL-сертификата в Nginx на Debian/Ubuntu

В этой статье я объясню, как добавить самоподписанный (самозаверяющий) SSL-сертификат в Nginx сервер на операционной системе Debian/Ubuntu. Самоподписанный сертификат — это сертификат, созданный и подписанный одним и тем же лицом. Данный сертификат не подписывается центром сертификации и используется только для тестирования на локальном сервере.

Вы также можете добавить доверенный SSL-сертификат для локальной среды в Nginx на Debian/Ubuntu (используя корневой ЦС). Если эта инструкция кажется вам сложной, попробуйте более простую статью о том, как добавить доверенный самоподписанный SSL-сертификат в Nginx на Debian/Ubuntu, но это решение не всегда работает.

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

Создание самоподписанного SSL-сертификата

Для создания SSL-сертификатов часто используется криптографическая библиотека OpenSSL. Пакет openssl должен быть в дистрибутиве, но если по какой-то причине его там нет, тогда давайте установим его.

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

sudo apt-get update

Установим OpenSSL, выполнив команду в терминале:

sudo apt-get install openssl

Теперь давайте создадим самоподписанный SSL-сертификат с приватным ключом, выполнив команду в терминале:

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/localhost.key -out /etc/ssl/certs/localhost.crt

где

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

Создание самоподписанного 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

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

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

https://localhost

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

Ваше соединение не защищено

Не волнуйтесь, это нормально. Просто добавим исключение в браузере:

Добавить исключение для самозаверяющего сертификата

Подтвердите исключение безопасности

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

Страница приветствия Nginx с SSL

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