Как защитить 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 на вашем веб-сервере с помощью одной команды.- 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
или предпочитаемого вами текстового редактора:- 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
для подтверждения .Если ваша текущая конфигурация виртуального хоста не соответствует примеру, обновите ее соответствующим образом. Когда вы закончите, сохраните файл и выйдите из редактора. Затем выполните следующую команду, чтобы подтвердить ваши изменения:
- sudo apache2ctl configtest
В ответ вы должны получить
Syntax OK
. Если вы получили сообщение об ошибке, повторно откройте файл виртуального хоста и проверьте наличие опечаток или отсутствующих символов. Как только синтаксис вашего файла конфигурации будет правильным, перезагрузите Apache, чтобы изменения вступили в силу:- sudo systemctl reload apache2
Благодаря этим изменениям Certbot сможет найти правильный блок VirtualHost и обновить его.
Далее мы обновим брандмауэр, чтобы разрешить HTTPS-трафик.
Шаг 3 — Разрешение HTTPS через брандмауэр
Если у вас включен брандмауэр UFW, как рекомендовано в руководствах по предварительным требованиям, вам необходимо настроить параметры, чтобы разрешить трафик HTTPS. После установки Apache регистрирует несколько разных профилей приложений UFW. Мы можем использовать полный профиль Apache, чтобы разрешить трафик HTTP и HTTPS на вашем сервере.
Чтобы проверить, какой трафик в настоящее время разрешен на вашем сервере, вы можете использовать:
- sudo ufw status
Если вы следовали одному из наших руководств по установке Apache, ваши выходные данные должны выглядеть примерно так, что означает, что в настоящее время разрешен только HTTP-трафик на порту
80
:OutputStatus: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)Чтобы дополнительно пропустить HTTPS-трафик, разрешите профиль «Apache Full» и удалите лишний профиль «Apache»:
- sudo ufw allow 'Apache Full'
- sudo ufw delete allow 'Apache'
Теперь ваш статус будет выглядеть так:
- sudo ufw status
OutputStatus: 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 и перезагрузке конфигурации при необходимости. Чтобы использовать этот плагин, введите следующее:
- sudo certbot --apache
Этот сценарий предложит вам ответить на ряд вопросов, чтобы настроить сертификат SSL. Во-первых, он попросит вас ввести действующий адрес электронной почты. Это электронное письмо будет использоваться для уведомлений о продлении и безопасности:
OutputSaving 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
. Этот скрипт запускается два раза в день и автоматически продлевает любой сертификат, срок действия которого истекает в течение тридцати дней.Чтобы проверить статус этой службы и убедиться, что она активна и работает, вы можете использовать:
- 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
:- sudo certbot renew --dry-run
Если вы не видите ошибок, все готово. При необходимости Certbot обновит ваши сертификаты и перезагрузит Apache, чтобы применить изменения. Если автоматический процесс продления когда-либо завершится сбоем, Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты с предупреждением о том, что срок действия вашего сертификата скоро истечет.
Заключение
В этом руководстве вы установили клиент Let’s Encrypt
certbot
, настроили и установили SSL-сертификат для своего домена и подтвердили, что служба автоматического обновления Certbot активна вsystemctl
. Если у вас есть дополнительные вопросы об использовании Certbot, их документация — хорошее место для начала. - Запись A с