
Переход на использование безопасных подключений в интернете из экзотических экспериментов стал повседневным требованием. Сайт «Компостер 2.0» не исключение: с 1 января 2019 года мы перешли на вещание в защищенном режиме. В этом нам помог сервис Certbot, где можно бесплатно получить зарегистрированный SSL-сертификат, открывающий доступ по https. Сертификат Let's Encrypt создается автоматически для всех самых распространенных ОС. Мы же будем настраивать веб-сервер Apache24 в среде FreeBSD 11.0, с тем чтобы обеспечить работу Drupal 8.
Как получить SSL-сертификат?
После установки программного обеспечения Сertbot можно приступить к загрузке SSL-сертификата в операционную среду Free BSD. Сначала необходимо остановить веб-сервер командой
service apache24 stop
И только после этого приступаем к регистрации сертификата. Это очень простая операция, которая в нашем случае выполняется из командной строки так:
#certbot certonly --standalone -d composter.com.ua -d www.composter.com.ua
Видно, что в этом процессе Сertbot будет контролировать представление нашего сайта, как домена с www в его URL и без. В случае успеха мы получим следующее сообщение:

Запомним, что /usr/local/etc/letsencrypt/live/ становится каталогом, в котором размещается вся ключевая информация, необходимая для дальнейшей организации доступа к нашему сайту по безопасному подключению. В этом каталоге Сertbot создает директории по имени каждого зарегистрированного им домена. В нашем случае корневые сертификаты нужно искать в подкаталоге composter.com.ua. Его содержимое понадобится нам для перевода веб-сервера в режим обслуживания запросов к 443 порту.
Настройка Apache24 для работы по HTTPS
Для того чтобы наш сайт использовал протокол HTTPS для SSL-шифрования трафика, веб-сервер Apache24 должен быть скомпилирован с модулем mod_ssl. По умолчанию FreeBSD 11.0 Release и новее так и делает, и нам остается только раскомментировать в конфигурационном файле /usr/local/etc/apache24/httpd.conf строку подключения этого модуля:
LoadModule ssl_module libexec/apache24/mod_ssl.so
В этом же файле требуется указать веб-серверу порт, с которым ему придется работать в дальнейшем. Дописываем строку Listen 443 следующей за Listen 80 (обычно, это 52-я строка текстового файла конфигурации). Теперь остается только настроить виртуальный хост нашего домена. Для этого приступаем к редактированию его конфигурационного файла из каталога /usr/local/etc/apache24/Includes/:
<VirtualHost *:80 *:443>
ServerName composter.com.ua
ServerAlias www.composter.com.ua
SSLEngine on
SSLCertificateFile /usr/local/etc/letsencrypt/live/composter.com.ua/cert.pem
SSLCertificateKeyFile /usr/local/etc/letsencrypt/live/composter.com.ua/privkey.pem
SSLCertificateChainFile /usr/local/etc/letsencrypt/live/composter.com.ua/chain.pem
...
В такой конфигурации сайт будет обрабатывать и запросы по http, адресованные в порт 80, и запросы https для 443-го порта. Если удалить *:80 из открывающего тега <VirtualHost *:80 *:443>, возникнет вопрос, что делать с запросами, которые приходят в этот порт?
Как настроить HTTPS в Drupal 8?
Система управления сайтом Drupal 8 в своих последних релизах содержит все необходимое для обработки и перенаправления запросов в режиме безопасного соединения https. Для этого достаточно отредактировать сценарий использования URL следующим образом (пример для доменного имени без www):
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]
Заранее стоит убедиться в том, что использование SSL уже разрешено. Строки, управляющие этим процессом, расположены сразу за директивой RewriteEngine on и должны иметь следующий вид:
# Set "protossl" to "s" if we were accessed via https://. This is used later
# if you enable "www." stripping or enforcement, in order to ensure that
# you don't bounce between http and https.
RewriteRule ^ - [E=protossl]
RewriteCond %{HTTPS} on
RewriteRule ^ - [E=protossl:s]
Теперь у сайта есть зарегистрированный SSL-сертификат сроком на 3 месяца. Главное — не забыть про его своевременное обновление.