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

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


Введение

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

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

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

Предпосылки

Чтобы следовать этому руководству, вам понадобятся:

  • Один сервер Ubuntu 20.04, настроенный в соответствии с этим руководством по начальной настройке сервера для Ubuntu 20.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 и 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, а также директивами ServerAlias, уже установленными соответствующим образом.

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

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

    Найдите существующие строки ServerName и ServerAlias. Они должны выглядеть так:

    ...
    ServerName your_domain
    ServerAlias 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» и удалите лишний профиль «Apache»:

    1. sudo ufw allow 'Apache Full'
    2. 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:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    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, чтобы перейти к следующему шагу.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    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.

    Which names would you like to activate HTTPS for?
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1: your_domain
    2: www.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): 
    

    Вы увидите такой вывод:

    Obtaining a new certificate
    Performing the following challenges:
    http-01 challenge for your_domain
    http-01 challenge for www.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 как отдельные методы доступа к вашему веб-сайту.

    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 завершена, и вам будут представлены окончательные замечания о вашем новом сертификате, где найти сгенерированные файлы и как протестировать вашу конфигурацию с помощью внешнего инструмента, который анализирует подлинность вашего сертификата:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Congratulations! You have successfully enabled https://your_domain and
    https://www.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=www.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 2020-07-27. 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"
     - Your account credentials have been saved in your Certbot
       configuration directory at /etc/letsencrypt. You should make a
       secure backup of this folder now. This configuration directory will
       also contain certificates and private keys obtained by Certbot so
       making regular backups of this folder is ideal.
     - 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: enabled) Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left Triggers: ● certbot.service Apr 28 17:57:48 fine-turtle 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, их документация — хорошее место для начала.