Drupal 8, FreeBSD и работа с SSL-сертификатом

Drupal 8, FreeBSD и работа с SSL-сертификатом

Переход на использование безопасных под­клю­че­ний в ин­тер­не­те из эк­зо­ти­че­ских экс­пе­ри­мен­тов стал по­все­днев­ным тре­бо­ва­ни­ем. Сайт «Компостер 2.0» не ис­клю­че­ние: с 1 ян­ва­ря 2019 го­да мы пе­ре­шли на ве­ща­ние в за­щи­щен­ном ре­жи­ме. В этом нам по­мог сер­вис Cert­bot, где мож­но бес­плат­но по­лу­чить за­ре­ги­ст­ри­ро­ван­ный SSL-сер­ти­фи­кат, от­кры­ва­ю­щий до­ступ по https. Сер­ти­фи­кат Let's En­crypt со­зда­ет­ся ав­то­ма­ти­че­ски для всех са­мых рас­про­ст­ра­нен­ных ОС. Мы же бу­дем на­ст­ра­и­вать веб-сер­вер 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 и без. В случае успеха мы получим следующее сообщение:

Certbot закончил свою работу, загрузив сертификат для сайта composter.com.ua

 

Запомним, что /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 месяца. Главное — не забыть про его сво­е­вре­мен­ное обновление.