Поиск по сайту:

Как защитить Apache с помощью Let's Encrypt в Ubuntu 18.04


Введение

Let’s Encrypt — это центр сертификации (ЦС), который предоставляет способ получить и установить бесплатный Certbot, который пытается автоматизировать большинство (если не все) необходимых шагов. В настоящее время весь процесс получения и установки сертификата полностью автоматизирован как на Apache, так и на Nginx.

В этом руководстве вы будете использовать Certbot, чтобы получить бесплатный SSL-сертификат для Apache в Ubuntu 18.04 и убедиться, что ваш сертификат настроен на автоматическое обновление.

В этом руководстве используется отдельный файл виртуального хоста Apache вместо файла конфигурации по умолчанию для настройки веб-сайта, который будет защищен Let’s Encrypt. Мы рекомендуем создавать новые файлы виртуального хоста Apache для каждого домена, размещенного на сервере, поскольку это помогает избежать распространенных ошибок и поддерживает файлы по умолчанию в качестве резервной настройки.

Предпосылки

Для выполнения этого урока вам понадобятся:

  • Один сервер Ubuntu 18.04, настроенный в соответствии с этим руководством по начальной настройке сервера для Ubuntu 18.04, включая пользователя без полномочий root и брандмауэр.
  • Полностью зарегистрированное доменное имя. В этом руководстве в качестве примера будет использоваться your_domain. Вы можете приобрести доменное имя на Freenom или воспользоваться услугами регистратора доменов по вашему выбору.
  • Обе следующие записи DNS настроены для вашего сервера. Вы можете следовать этому введению в DNS DigitalOcean, чтобы узнать, как их добавить.
    • Запись A с your_domain, указывающая на общедоступный IP-адрес вашего сервера.
    • Запись A с www.your_domain, указывающая на общедоступный IP-адрес вашего сервера.

    Apache устанавливается с помощью следующего файла виртуального хоста для вашего домена. В этом руководстве в качестве примера будет использоваться /etc/apache2/sites-available/your_domain.conf.

    Шаг 1 — Установка Certbot

    Чтобы получить SSL-сертификат с помощью Let’s Encrypt, вам необходимо установить программное обеспечение Certbot на свой сервер. В этом руководстве мы будем использовать стандартные репозитории пакетов Ubuntu для установки Certbot.

    Выполните следующую команду, которая установит два пакета: certbot и python3-certbot-apache. Последний представляет собой плагин, который интегрирует Certbot с Apache, чтобы можно было автоматизировать получение сертификата и настройку HTTPS на вашем веб-сервере с помощью одной команды:

    1. sudo apt install certbot python3-certbot-apache

    Подтвердите установку, нажав Y, а затем ENTER для подтверждения.

    Теперь Certbot установлен на вашем сервере. Далее вы проверите конфигурацию Apache, чтобы убедиться, что ваш виртуальный хост настроен правильно. Это гарантирует, что клиентский скрипт certbot сможет обнаружить ваши домены и перенастроить ваш веб-сервер для автоматического использования вновь созданного SSL-сертификата.

    Шаг 2 — Проверка конфигурации виртуального хоста Apache

    Чтобы автоматически получить и настроить SSL для вашего веб-сервера, Certbot должен иметь возможность найти правильный виртуальный хост в ваших файлах конфигурации Apache. Доменные имена вашего сервера будут получены из директив ServerName и ServerAlias, определенных в вашем блоке конфигурации VirtualHost.

    Если вы выполнили шаг настройки виртуального хоста в руководстве по установке Apache, у вас должен быть блок VirtualHost для вашего домена в /etc/apache2/sites-available/your_domain.conf с директивой ServerName, уже заданной соответствующим образом.

    Для проверки откройте файл виртуального хоста для вашего домена с помощью nano или вашего любимого текстового редактора:

    1. sudo nano /etc/apache2/sites-available/your_domain.conf

    Найдите существующие строки ServerName и ServerAlias:

    ...
    ServerName your_domain;
    SeverAlias www.your_domain
    ...
    

    Если ваши ServerName и ServerAlias уже настроены, вы можете выйти из текстового редактора и перейти к следующему шагу. Если вы используете nano, вы можете сделать это, нажав CTRL + X, затем Y и ENTER.

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

    1. sudo apache2ctl configtest

    Если в синтаксисе файла вашего виртуального хоста нет ошибок, вы получите ответ Syntax OK. Если вы получили сообщение об ошибке, повторно откройте файл виртуального хоста и проверьте наличие опечаток или отсутствующих символов. Как только синтаксис вашего файла конфигурации будет правильным, перезагрузите Apache, чтобы загрузить новую конфигурацию:

    1. sudo systemctl reload apache2

    Когда эти изменения вступят в силу, Certbot сможет найти правильный блок VirtualHost и обновить его.

    Затем вы обновите брандмауэр, чтобы разрешить HTTPS-трафик.

    Шаг 3 — Разрешение HTTPS через брандмауэр

    Если у вас включен брандмауэр UFW, как рекомендовано в руководствах по предварительным требованиям, вам необходимо настроить параметры, чтобы разрешить трафик HTTPS. Apache регистрирует несколько профилей приложений UFW, и вы можете использовать полный профиль Apache, чтобы разрешить трафик HTTP и HTTPS на вашем сервере.

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

    1. sudo ufw status

    Если вы следовали одному из наших руководств по установке Apache, ваши выходные данные будут генерировать следующее, это означает, что разрешен только HTTP-трафик через порт 80:

    Output
    Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

    Чтобы дополнительно пропустить HTTPS-трафик, разрешите профиль Apache Full:

    1. sudo ufw allow 'Apache Full'

    Затем удалите избыточный профиль Apache:

    1. sudo ufw delete allow 'Apache'

    Еще раз проверьте статус:

    1. sudo ufw status

    Вы должны получить следующий вывод:

    Output
    Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

    Теперь вы готовы запустить Certbot и получить свои сертификаты.

    Шаг 4 — Получение SSL-сертификата

    Certbot предоставляет различные способы получения SSL-сертификатов с помощью подключаемых модулей. Плагин Apache позаботится о перенастройке Apache и перезагрузке конфигурации при необходимости. Чтобы использовать этот плагин, выполните следующее:

    1. sudo certbot --apache

    Эта команда сгенерирует запрос с рядом вопросов для настройки сертификата SSL. Во-первых, вас попросят указать действующий адрес электронной почты для уведомлений о продлении и безопасности:

    Output
    Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): you@your_domain

    Указав действительный адрес электронной почты, нажмите ENTER и перейдите к следующему шагу. Вас попросят подтвердить, согласны ли вы с условиями обслуживания Let’s Encrypt. Подтвердите, нажав A и ENTER:

    Output
    Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A

    Затем вас спросят, хотите ли вы поделиться своей электронной почтой с Electronic Frontier Foundation, чтобы получать новости и другую информацию. Если вы не хотите подписываться, нажмите N, в противном случае нажмите Y и затем ENTER, чтобы перейти к следующему шагу:

    Output
    Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: N

    Приглашение сообщит Certbot о том, для каких доменов вы хотите активировать HTTPS. Список доменных имен автоматически берется из конфигурации вашего виртуального хоста Apache. Вот почему было важно убедиться, что на вашем виртуальном хосте настроены правильные параметры ServerName и ServerAlias. Если вы хотите включить HTTPS для всех перечисленных доменных имен (рекомендуется), оставьте поле пустым и нажмите ENTER, чтобы продолжить. В противном случае выберите домены, для которых вы хотите включить HTTPS, перечислив соответствующие номера, разделенные запятыми и/или пробелами, а затем нажмите ENTER:

    Output
    Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: your_domain 2: your_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):

    Вы получите следующий вывод:

    Output
    Obtaining a new certificate Performing the following challenges: http-01 challenge for your_domain http-01 challenge for your_domain Enabled Apache rewrite module Waiting for verification... Cleaning up challenges Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf Enabled Apache socache_shmcb module Enabled Apache ssl module Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf

    Далее вам будет предложено выбрать, хотите ли вы, чтобы HTTP-трафик направлялся на HTTPS. Это означает, что когда кто-то посещает ваш сайт по незашифрованным каналам (HTTP), он автоматически перенаправляется на HTTPS-адрес вашего сайта. Выберите 2, чтобы включить перенаправление, или 1, если вы хотите использовать HTTP и HTTPS как отдельные методы доступа к вашему веб-сайту:

    Output
    Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. ------------------------------------------------------------------------------- 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. ------------------------------------------------------------------------------- Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

    После ввода ответа настройка Certbot завершится. Вы получите заключительные замечания о вашем новом сертификате, о том, где найти сгенерированные файлы и как протестировать вашу конфигурацию с помощью внешнего инструмента для анализа подлинности вашего сертификата:

    Output
    Congratulations! You have successfully enabled https://your_domain and your_domain You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=your_domain https://www.ssllabs.com/ssltest/analyze.html?d=your_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2022-03-07. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

    Ваши сертификаты загружены, установлены и загружены в конфигурацию Apache. Попробуйте перезагрузить свой веб-сайт с помощью https:// и обратите внимание на индикатор безопасности вашего браузера. Он должен указывать на то, что сайт защищен должным образом, обычно с помощью значка замка в адресной строке.

    Вы можете использовать SSL Labs Server Test, чтобы проверить уровень вашего сертификата и получить подробную информацию о нем с точки зрения внешней службы.

    На следующем этапе вы протестируете функцию автоматического обновления Certbot, которая гарантирует, что ваш сертификат будет автоматически обновляться до истечения срока действия.

    Шаг 5 — Проверка автоматического продления Certbot

    Сертификаты Let’s Encrypt действительны только в течение девяноста дней. Это сделано для того, чтобы побудить пользователей автоматизировать процесс обновления своих сертификатов и гарантировать, что срок действия неправильно используемых сертификатов или украденных ключей истечет раньше, чем позже.

    Установленный вами пакет certbot позаботится о продлении, включив сценарий обновления в /etc/cron.d, который управляется службой systemctl. называется certbot.timer. Этот скрипт запускается два раза в день и автоматически продлевает любой сертификат, срок действия которого истекает в течение тридцати дней.

    Проверьте статус этой службы и убедитесь, что она активна и работает:

    1. sudo systemctl status certbot.timer

    Вы получите вывод, подобный следующему:

    Output
    ● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: en Active: active (waiting) since Tue 2021-12-07 20:04:42 UTC; 1h 45min ago Trigger: Wed 2021-12-08 11:22:45 UTC; 13h left Dec 07 20:04:42 encrypt systemd[1]: Started Run certbot twice daily.

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

    1. sudo certbot renew --dry-run

    Если вы не получили никаких ошибок, все готово. При необходимости Certbot обновит ваши сертификаты и перезагрузит Apache, чтобы применить изменения. Если автоматический процесс продления когда-либо завершится с ошибкой, Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты с предупреждением о том, что срок действия вашего сертификата скоро истечет.

    Заключение

    В этом руководстве вы установили клиент Let’s Encrypt certbot, настроили и установили SSL-сертификаты для своего домена и подтвердили, что служба автоматического обновления сертификатов Certbot активна в systemctl. Если у вас есть дополнительные вопросы об использовании Certbot, их документация — хорошее место для начала.