SSL-сертификат через Certbot
Как бесплатно получить SSL-сертификат Let's Encrypt с помощью Certbot.
Время: 10 мин · Сложность: ★☆☆☆☆
Подходит: ✓ Ubuntu 22.04 · ✓ Debian 12
Краткое описание
Certbot — официальный клиент Let's Encrypt для автоматического получения и обновления бесплатных SSL-сертификатов. Поддерживает Nginx и Apache: сам редактирует конфигурацию веб-сервера и добавляет обновление по расписанию через systemd.
Когда пригодится
- При первом запуске сайта на VPS
- При добавлении нового домена или поддомена
- При переходе с платного сертификата на бесплатный Let's Encrypt
Что понадобится
- Домен, A-запись которого указывает на IP вашего сервера
- Порт 80 открыт в UFW или другом файрволе (Let's Encrypt проверяет домен через HTTP)
- Установленный Nginx или Apache (для режима с плагином)
Пошаговая инструкция
1. Установка Certbot
Базовый пакет:
apt install -y certbot
Плагин для Nginx:
apt install -y python3-certbot-nginx
Плагин для Apache:
apt install -y python3-certbot-apache
2. Получить сертификат
Для Nginx (Certbot сам отредактирует конфигурацию):
certbot --nginx -d example.com -d www.example.com
Для Apache:
certbot --apache -d example.com
Standalone-режим (без веб-сервера, Certbot поднимает собственный HTTP-сервер):
certbot certonly --standalone -d example.com
В standalone-режиме порт 80 должен быть свободен — остановите Nginx/Apache перед запуском.
Certbot задаст несколько вопросов: email для уведомлений об истечении сертификата и согласие с условиями использования.
3. Где хранятся сертификаты
После успешного получения файлы находятся в:
/etc/letsencrypt/live/example.com/
├── cert.pem — сертификат домена
├── chain.pem — промежуточные сертификаты
├── fullchain.pem — cert.pem + chain.pem (используйте в Nginx/Apache)
└── privkey.pem — приватный ключ
В конфигурации Nginx укажите:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
4. Автообновление
Certbot автоматически устанавливает systemd-таймер. Проверьте:
systemctl status certbot.timer
Таймер запускает обновление дважды в день. Сертификаты обновляются только если до истечения осталось меньше 30 дней.
5. Проверить автообновление вручную
certbot renew --dry-run
Флаг --dry-run проходит весь процесс без реального обновления — используйте для проверки что всё настроено правильно.
Принудительное обновление (без dry-run):
certbot renew --force-renewal
Проверка результата
Откройте https://example.com в браузере. В адресной строке должен быть замок без предупреждений. Кликните на замок — увидите информацию о сертификате с Let's Encrypt в качестве издателя.
Или проверьте через командную строку:
curl -I https://example.com
В ответе должен быть HTTP/2 200 (или 301 если настроен редирект).
Возможные ошибки
«Unable to connect to» или «Connection refused» — порт 80 закрыт в UFW. Выполните ufw allow 80 и повторите.
«Too many certificates already issued» — Let's Encrypt ограничивает выдачу до 5 сертификатов на домен в неделю. Подождите или используйте тестовую среду: добавьте флаг --staging к команде certbot.
«DNS problem: NXDOMAIN» — домен не резолвится. Проверьте A-запись: dig example.com. Изменения DNS могут распространяться до 24 часов.
«Problem binding to port 80» — порт занят Nginx или Apache. В standalone-режиме остановите веб-сервер перед запуском certbot: systemctl stop nginx.
Certbot отредактировал конфиг Nginx и сайт перестал работать — проверьте конфигурацию: nginx -t. Откатите изменения из резервной копии (Certbot сохраняет оригинал с суффиксом .bak).
FAQ
Сколько доменов можно добавить в один сертификат?
До 100 доменов через флаги -d. Let's Encrypt поддерживает SAN (Subject Alternative Names).
Работает ли Certbot с wildcard-доменами (*.example.com)?
Да, но для wildcard-сертификатов нужна DNS-верификация вместо HTTP. Используйте certbot certonly --manual --preferred-challenges dns -d *.example.com.
Что произойдёт если не обновить сертификат вовремя? Браузеры покажут предупреждение «Соединение не защищено», а сайт станет недоступен для большинства пользователей. Certbot отправит предупреждение на email за 20 и 10 дней до истечения.
Можно ли использовать Certbot без доменного имени? Нет. Let's Encrypt выдаёт сертификаты только для доменных имён, не для IP-адресов.
Полезные ссылки
certbot --help— полный список команд и флагов/etc/letsencrypt/renewal/— конфигурация автообновления для каждого домена/var/log/letsencrypt/letsencrypt.log— журнал операций Certbot