10.02.2020 13:10

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

В этой статье я объясню, как добавить доверенный SSL-сертификат для локальной среды разработки в Apache сервер на операционной системе Debian/Ubuntu. Я всегда использую HTTPS протокол для локальной среды разработки. Но браузер отображает уведомление о том, что он не доверяет самоподписанному (самозаверяющему) SSL-сертификату. Я уже писал статью о том, как добавить доверенный самоподписанный SSL-сертификат в Apache на 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-сертификатов

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

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

sudo nano /etc/apache2/sites-available/default-ssl.conf
<IfModule mod_ssl.c>
	<VirtualHost _default_:443>
		ServerAdmin webmaster@localhost

		DocumentRoot /var/www/html

		ErrorLog ${APACHE_LOG_DIR}/error.log
		CustomLog ${APACHE_LOG_DIR}/access.log combined

		SSLEngine on
		SSLCertificateFile	/etc/ssl/certs/localhost.crt
		SSLCertificateKeyFile /etc/ssl/private/localhost.key

		<FilesMatch "\.(cgi|shtml|phtml|php)$">
			SSLOptions +StdEnvVars
		</FilesMatch>
		<Directory /usr/lib/cgi-bin>
			SSLOptions +StdEnvVars
		</Directory>
	</VirtualHost>
</IfModule>

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

Вы должны активировать модуль mod_ssl, выполнив команду в терминале:

sudo a2enmod ssl

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

sudo a2ensite default-ssl

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

sudo apache2 -t

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

sudo service apache2 reload

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

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

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

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

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

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

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

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

https://localhost

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

Apache welcome page with trusted SSL

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