25.11.2019 09:10 24.04.2020 14:45

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

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

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

Настройка 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

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

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

https://localhost

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

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

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

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

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

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

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

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