Бесплатный SSL-сертификат с Let's Encrypt и Certbot

Опубликовано Обновлено 4 мин. чтения

Бесплатный 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?
90 дней. Certbot обновляет его автоматически, как только до конца срока остаётся меньше 30 дней. Отвечающий за это таймер systemd настраивается при установке.
Нужно ли продлевать сертификат вручную?
Нет. Один раз проверьте командой certbot renew --dry-run, что продление проходит без ошибок. Дальше Certbot делает это самостоятельно в фоновом режиме.
Работает ли Let's Encrypt для поддоменов?
Да. Дополнительные имена просто добавляются к команде через дополнительные параметры вида -d. Для wildcard-сертификата нужна ещё и проверка через DNS-запись, а значит подходящий DNS-плагин для Certbot.
Почему проверка домена завершается ошибкой?
Почти всегда A-запись домена указывает не на этот сервер либо файрвол блокирует порт 80. Let's Encrypt в этом случае не может достучаться до сервера и прерывает выпуск сертификата.

Lets-Encrypt Certbot SSL-сертификат HTTPS Apache Debian Ubuntu