Бесплатный SSL-сертификат с Let's Encrypt и Certbot
Бесплатный SSL-сертификат для вашего Linux-сервера: установка Certbot в Debian и Ubuntu, выпуск сертификата Let's Encrypt для Apache и автоматическое продление.
SSL-сертификат от Let's Encrypt ничего не стоит, настраивается за несколько минут и принимается всеми распространёнными браузерами. В этой инструкции вы включите HTTPS на собственном Linux-сервере с Apache: в Debian 13, Debian 12, Ubuntu 24.04 LTS и Ubuntu 22.04 LTS.
Выпуск сертификата берёт на себя Certbot, официальный ACME-клиент организации Electronic Frontier Foundation. Certbot запрашивает сертификат, прописывает его в конфигурацию Apache и затем продлевает самостоятельно через таймер systemd.
Требования
- Домен, A-запись которого (а при использовании IPv6 дополнительно и AAAA-запись) указывает на ваш VPS или root-сервер.
- Работающий веб-сервер Apache2 с VirtualHost для этого домена.
- Доступ с правами root по SSH.
- Порты 80 и 443 должны быть доступны извне. Let's Encrypt проверяет домен через порт 80.
Сначала убедитесь, что домен действительно указывает на ваш сервер. Для этого введите свой домен на странице https://check-host.net/. Если там появляется IP-адрес вашего сервера, можно продолжать. Если DNS всё ещё указывает на старую цель, дождитесь обновления, иначе выпуск сертификата завершится ошибкой.
Обновление системы
Сначала приведите список пакетов и уже установленные пакеты в актуальное состояние:
apt update && apt upgrade -y
Установка Certbot
Есть два распространённых способа. Пакет из репозитория дистрибутива самый простой и для большинства серверов его вполне достаточно. Пакет snap всегда содержит самую свежую версию Certbot и официально рекомендуется организацией Electronic Frontier Foundation.
Вариант 1: Certbot из репозитория дистрибутива
В Debian и Ubuntu Certbot и плагин для Apache лежат прямо в источниках пакетов:
apt install certbot python3-certbot-apache -y
Раньше широко распространённый пакет «python-certbot-apache» относился к Python 2 и больше не существует. Во всех актуальных версиях Debian и Ubuntu правильное имя пакета: «python3-certbot-apache».
Вариант 2: установка Certbot через snap
Если вам нужна самая свежая версия Certbot, например ради DNS-плагинов или wildcard-сертификатов, установите Certbot как snap. Предварительно удалите установку из пакета дистрибутива, если она есть, чтобы обе не мешали друг другу:
apt remove certbot -y
snap install core
snap refresh core
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
Выпуск сертификата и подключение его к Apache
Самый быстрый путь: плагин для Apache. Certbot читает имеющиеся VirtualHost, запрашивает сертификат и сам записывает подходящую конфигурацию SSL:
certbot --apache -d MeineDomain.de -d www.MeineDomain.de
Если вы предпочитаете контролировать конфигурацию Apache самостоятельно, проверку домена можно провести через каталог webroot. Укажите при этом ровно тот каталог, который VirtualHost использует как DocumentRoot:
certbot --authenticator webroot --installer apache -w /var/www/MeineDomain.de -d MeineDomain.de -d www.MeineDomain.de
Если ваш сайт лежит в стандартном каталоге, команда выглядит так:
certbot --authenticator webroot --installer apache -w /var/www/html/ -d MeineDomain.de -d www.MeineDomain.de
Вопросы, которые задаёт Certbot
При первом запуске Certbot задаёт несколько вопросов:
- Адрес электронной почты: укажите адрес, который вы действительно читаете. Let's Encrypt отправляет на него предупреждение, если продление не состоялось.
- Условия использования: клавиша «A» означает согласие.
- Рассылка Electronic Frontier Foundation: «Y» означает да, «N» означает нет. Это добровольно и на сертификат никак не влияет.
- Переадресация на HTTPS: выберите вариант «Redirect», чтобы Apache автоматически перенаправлял все обращения по HTTP на HTTPS.
После этого Certbot показывает путь к сертификату. Файлы лежат в каталоге /etc/letsencrypt/live/MeineDomain.de/. Не редактируйте эти файлы вручную, они перезаписываются при каждом продлении.
Проверка автоматического продления
Сертификат Let's Encrypt действует 90 дней. Certbot обновляет его автоматически, как только до конца срока остаётся меньше 30 дней. Для этого в пакете предусмотрен таймер systemd. Проверьте, активен ли он:
systemctl list-timers certbot.timer
Если таймер не активен, включите его:
systemctl enable --now certbot.timer
После этого проверьте всю процедуру вхолостую. Ничего при этом не выпускается, Certbot только проигрывает продление:
certbot renew --dry-run
Чтобы Apache после продления действительно использовал новый сертификат, один раз пропишите deploy-hook:
certbot renew --deploy-hook "systemctl reload apache2"
Просмотр и удаление сертификатов
Обзор всех сертификатов, которыми управляет сервер, выводит команда:
certbot certificates
Ненужный сертификат удаляется вот так, чтобы Certbot больше не пытался его продлевать:
certbot delete --cert-name MeineDomain.de
Частые ошибки
- «Could not bind to port 80»: порт 80 занят другой службой. Остановите её или используйте метод webroot, который работает через уже запущенный Apache.
- «Invalid response from http://.../.well-known/acme-challenge/...»: домен указывает не на этот сервер, файрвол блокирует порт 80 либо указанный каталог webroot не соответствует VirtualHost.
- «The requested apache plugin does not appear to be installed»: отсутствует пакет «python3-certbot-apache».
- «too many certificates already issued»: вы упёрлись в ограничение Let's Encrypt. В дальнейшем проверяйте конфигурации с параметром
--dry-run, прежде чем запрашивать настоящий сертификат. - Браузер по-прежнему показывает предупреждение: очистите кэш браузера и проверьте, был ли Apache перезапущен после выпуска сертификата.
Постоянная переадресация с HTTP на HTTPS
Если при ответах на вопросы Certbot вы не включили переадресацию, её можно добавить в любой момент. Как это делается через файл .htaccess, мы описываем в отдельной статье о переадресации с HTTP на HTTPS.
Частые вопросы
Сколько стоит SSL-сертификат от Let's Encrypt?
Сколько действует сертификат Let's Encrypt?
Нужно ли продлевать сертификат вручную?
Работает ли Let's Encrypt для поддоменов?
Почему проверка домена завершается ошибкой?
2023-2026 KernelHost GmbH. Все права защищены. Эта инструкция охраняется авторским правом. Публикация на других сайтах, в том числе частично или в изменённом виде, без нашего письменного согласия не разрешается. Цитирование с указанием источника и активной ссылкой мы приветствуем.

