Let's Encrypt — это удостоверяющий центр (CA), который бесплатно выдаёт TLS/SSL-сертификаты и позволяет включить шифрованный HTTPS на любом веб-сервере. Процесс получения и установки сертификата автоматизирован через клиент Certbot: он сам находит нужный виртуальный хост в конфигурации Apache, запрашивает сертификат и при необходимости обновляет его без вашего участия.
В этом руководстве мы разберём полный цикл работы с Apache на Ubuntu: установим Certbot, получим бесплатный сертификат для домена и убедимся, что автоматическое продление настроено и работает корректно.
Для каждого домена мы используем отдельный файл виртуального хоста вместо дефолтной конфигурации Apache — это упрощает управление и снижает риск случайно сломать что-то лишнее.
Содержание
- Что нужно подготовить заранее
- Шаг 1. Установка Certbot
- Шаг 2. Проверка конфигурации виртуального хоста Apache
- Шаг 3. Открытие порта 443 в файрволе
- Шаг 4. Получение SSL-сертификата
- Шаг 5. Проверка автоматического обновления
Что нужно подготовить заранее
Прежде чем начать, убедитесь, что у вас есть:
- Сервер 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 и выделенные серверы, круглосуточную техническую поддержку и прозрачные тарифы.
Оставьте заявку — и начните работу уже сегодня!