Certbot — командная утилита с открытым исходным кодом, реализующая ACME-протокол (Automated Certificate Management Environment) для взаимодействия с центром сертификации Let's Encrypt. Разработана и поддерживается Electronic Frontier Foundation (EFF). Certbot автоматизирует всё: создание CSR, валидацию домена, загрузку сертификата, установку в конфиг веб-сервера и автообновление.
Как работает
Certbot реализует два способа подтверждения владения доменом. HTTP-01 challenge: Certbot создаёт временный файл по пути /.well-known/acme-challenge/, Let's Encrypt проверяет его доступность. DNS-01 challenge: Certbot создаёт TXT-запись в DNS с токеном, Let's Encrypt проверяет DNS. DNS-01 нужен для wildcard-сертификатов — HTTP-01 их не поддерживает.
После валидации Certbot скачивает сертификат в /etc/letsencrypt/live/example.com/: fullchain.pem (сертификат + цепочка CA), privkey.pem (приватный ключ), cert.pem (только сертификат), chain.pem (только промежуточные CA).
При установке с флагом --nginx или --apache Certbot автоматически правит конфигурацию веб-сервера: добавляет ssl_certificate, ssl_certificate_key и настраивает HTTPS-перенаправление. Автообновление настраивается через systemd timer или cron: certbot renew --quiet.
История
Certbot разработан EFF в 2015 году под названием «Let's Encrypt Client». В 2016 году переименован в Certbot. Let's Encrypt открылся для публики в апреле 2016 года — Certbot стал основным способом получения сертификатов. К 2024 году Let's Encrypt выдал более 3 миллиардов сертификатов, Certbot — один из десятков ACME-клиентов, но наиболее распространён на Debian/Ubuntu.
Основные команды
certbot certonly --nginx -d example.com -d www.example.com— получить сертификат без изменения конфига.certbot --nginx -d example.com— получить и автоматически настроить Nginx.certbot renew --dry-run— проверить обновление без реального запроса.certbot certificates— показать все установленные сертификаты.
Связь с хостингом
На VPS с Nginx Certbot — стандартный способ получения бесплатных сертификатов. На управляемых хостингах сертификаты Let's Encrypt часто устанавливаются через панель управления, а Certbot работает в фоне. Альтернативы: acme.sh (Python-независимый shell-скрипт), win-acme (для Windows), Caddy (веб-сервер со встроенным ACME).
Режимы получения сертификата
Standalone: Certbot запускает временный веб-сервер на 80 порту (сервис нужно остановить). Webroot: кладёт challenge-файл в директорию активного веб-сервера. Apache/Nginx плагины: автоматически конфигурируют сервер. DNS-01: добавляет TXT-запись в DNS — единственный способ получить Wildcard.
Автопродление
certbot renew --dry-run — тест автопродления. Certbot устанавливает cron (или systemd timer): /etc/cron.d/certbot. Проверяет сертификаты дважды в день, продлевает за 30 дней до истечения. Let's Encrypt отправляет уведомление на email за 20 дней до истечения.
Распространённые проблемы
Rate limit: 5 неудачных попыток в час, 50 сертификатов в неделю на домен. Порт 80 заблокирован фаерволом — проверить через nmap -p 80 domain.ru. IPv6: если A-запись и AAAA указывают на разные серверы — challenge может провалиться. DNS-кэш старых записей — подождать TTL.