...

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

Let's Encrypt — это удостоверяющий центр (CA), который бесплатно выдаёт TLS/SSL-сертификаты и позволяет включить шифрованный HTTPS на любом веб-сервере. Процесс получения и установки сертификата автоматизирован через клиент Certbot: он сам находит нужный виртуальный хост в конфигурации Apache, запрашивает сертификат и при необходимости обновляет его без вашего участия.

В этом руководстве мы разберём полный цикл работы с Apache на Ubuntu: установим Certbot, получим бесплатный сертификат для домена и убедимся, что автоматическое продление настроено и работает корректно.

Для каждого домена мы используем отдельный файл виртуального хоста вместо дефолтной конфигурации Apache — это упрощает управление и снижает риск случайно сломать что-то лишнее.

Содержание

Что нужно подготовить заранее

Прежде чем начать, убедитесь, что у вас есть:

  • Сервер Ubuntu с пользователем, имеющим права sudo, и включённым файрволом
  • Зарегистрированное доменное имя (в примерах используется your_domain)
  • DNS-запись типа A для your_domain, указывающая на публичный IP-адрес сервера
  • DNS-запись типа A для www.your_domain, также указывающая на этот IP
  • Установленный Apache с настроенным виртуальным хостом для вашего домена — файл /etc/apache2/sites-available/your_domain.conf

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

Certbot доступен в стандартных репозиториях Ubuntu. Сначала обновите индекс пакетов:

sudo apt update

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

sudo apt install certbot python3-certbot-apache

В процессе установки система попросит подтверждение — нажмите Y, затем Enter.

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

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

Certbot определяет, для каких доменов выдавать сертификат, по директивам ServerName и ServerAlias внутри блока VirtualHost. Прежде чем запускать получение сертификата, убедитесь, что они указаны верно.

Откройте файл конфигурации вашего домена:

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

Найдите строки ServerName и ServerAlias — они должны выглядеть так:

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain
ServerAlias www.your_domain
...

Если всё совпадает, закройте редактор и переходите к следующему шагу. Если нет — исправьте значения. В nano для выхода нажмите Ctrl+X, затем Y и Enter для сохранения. После правок проверьте синтаксис конфигурации:

sudo apache2ctl configtest

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

sudo systemctl reload apache2

Теперь Certbot сможет найти нужный блок VirtualHost и внести в него изменения. Следующий шаг — файрвол.

Шаг 3. Открытие порта 443 в файрволе

Если на сервере включён UFW, нужно разрешить входящий HTTPS-трафик. При установке Apache регистрирует в UFW несколько профилей. Профиль Apache Full разрешает одновременно HTTP (порт 80) и HTTPS (порт 443).

Сначала проверьте текущее состояние файрвола:

sudo ufw status

Если вы устанавливали Apache по стандартной инструкции, вывод будет примерно таким — открыт только порт 80:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Apache                     ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Apache (v6)                ALLOW       Anywhere (v6)

Добавьте профиль Apache Full, который включает оба порта:

sudo ufw allow 'Apache Full'

Удалите теперь уже лишний профиль Apache:

sudo ufw delete allow 'Apache'

Проверьте итоговое состояние:

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)

Файрвол настроен. Можно переходить к получению сертификата.

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

Certbot работает через плагины. Плагин для Apache сам перепишет конфигурацию виртуального хоста и перезагрузит сервер — вручную ничего редактировать не придётся. Запустите его:

sudo certbot --apache

Скрипт задаст несколько вопросов. Первый — адрес электронной почты для уведомлений об истечении срока и предупреждений безопасности:

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

Введите адрес и нажмите Enter. Дальше — согласие с условиями использования Let's Encrypt. Нажмите Y и 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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Затем Certbot спросит, готовы ли вы передать email фонду Electronic Frontier Foundation. Это необязательно — нажмите N, если не хотите получать рассылку:

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

Следующий вопрос — для каких доменов активировать HTTPS. Certbot автоматически подтягивает имена из конфигурации Apache, поэтому список уже заполнен. Чтобы включить 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):

После завершения Certbot выведет итоговую информацию о сертификате и путях к файлам:

Output
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-07-10.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf
Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain.com

Сертификат установлен, Apache перенастроен: HTTP-трафик теперь автоматически перенаправляется на HTTPS. Откройте сайт в браузере — в адресной строке должен появиться замок. Для независимой проверки оценки сервера воспользуйтесь SSL Labs Server Test.

Шаг 5. Проверка автоматического обновления

Сертификаты Let's Encrypt действительны 90 дней — такой срок стимулирует автоматизацию и снижает ущерб от компрометации ключа. Пакет Certbot при установке регистрирует задание в /etc/cron.d, которым управляет служба certbot.timer. Скрипт запускается дважды в сутки и продлевает те сертификаты, до истечения которых осталось меньше 30 дней.

Проверьте статус таймера:

sudo systemctl status certbot.timer
Output
● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:>
     Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago
    Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left
   Triggers: ● certbot.service

Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.

Чтобы убедиться, что процедура продления отработает без ошибок, запустите тестовый прогон — он имитирует обновление, не отправляя реальных запросов на серверы Let's Encrypt:

sudo certbot renew --dry-run
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for your_domain and www.your_domain.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/your_domain/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Если ошибок нет — всё настроено правильно. Когда придёт время, Certbot самостоятельно продлит сертификат и перезагрузит Apache. Если автоматическое обновление по какой-то причине не сработает, на указанный вами email придёт предупреждение о скором истечении срока действия сертификата.

Заключение

Мы прошли полный цикл: установили Certbot, получили бесплатный SSL-сертификат от Let's Encrypt, настроили Apache для работы по HTTPS и проверили, что автоматическое продление активно. Если в процессе возникнут вопросы — официальная документация Certbot подробно описывает все нюансы работы с плагинами и дополнительные параметры запуска.

Серверное решение, готовое к работе

Хотите развернуть защищённый сервер с HTTPS без лишних усилий? Мы предлагаем надёжные VPS и выделенные серверы, круглосуточную техническую поддержку и прозрачные тарифы.

Оставьте заявку — и начните работу уже сегодня!

Для реализации основных услуг и функций нашего сайта, а также для сбора данных о том, как посетители взаимодействуют с нашими сайтом, продуктами и услугами, мы применяем различные инструменты, включая файлы cookie. Нажимая «Принимаю», вы соглашаетесь с текущими правилами и условиями использования сайта и даете разрешение на использование этих данных. В противном случае, пожалуйста, покиньте сайт.

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.