Как получить бесплатный SSL-сертификат через Certbot и Nginx на Ubuntu 24
Certbot и Nginx — обычный способ поставить на сервер с Ubuntu бесплатный SSL-сертификат Let’s Encrypt: Certbot получает сертификат, сам дописывает строки HTTPS в настройки сайта и вовремя его продлевает. Инструкция следует указаниям certbot.eff.org для Ubuntu 24.04 и 22.04. В конце — ошибки, на которые натыкаются чаще всего, и что каждая из них значит.
Что нужно до начала
- Домен, у которого запись A (и AAAA, если она есть) указывает на этот сервер. Let’s Encrypt проверяет домен из интернета.
- Nginx с сайтом, в
server_nameкоторого стоит этот домен. Если сайта ещё нет, см. как установить Nginx на Ubuntu. - Открытые порты 80 и 443. Чтобы убедиться, что домен ваш, Let’s Encrypt подключается к порту 80.
Если UFW включён (в его состоянии стоит Status: active), разрешите Nginx на обоих портах:
sudo ufw allow 'Nginx Full'
sudo ufw statusНа облачном сервере откройте порты 80 и 443 ещё и в брандмауэре или группе безопасности провайдера. UFW им не управляет.
Как установить Certbot через snap
certbot.eff.org советует пакет snap: в нём всегда текущая версия, и сертификаты он продлевает сам. Snap в Ubuntu есть из коробки. Первая команда удаляет старый Certbot из apt, если он был. Ваши сертификаты в /etc/letsencrypt/ остаются на месте.
sudo apt remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
certbot --versionСсылка кладёт команду certbot на привычный путь. Если apt пишет Package 'certbot' is not installed, so not removed, удалять было нечего.
Как запустить Certbot для Nginx
Каждый домен, который должен войти в сертификат, указывайте через отдельный -d. При первом запуске Certbot спросит адрес почты и попросит принять условия Let’s Encrypt.
sudo certbot --nginx -d example.com -d www.example.comCertbot находит блок server с таким server_name, добавляет строки сертификата и переадресацию с HTTP на HTTPS и перечитывает настройки Nginx. В конце он сообщает Successfully received certificate и Successfully deployed certificate. Откройте https://example.com: в браузере будет замок.
Если настройки Nginx хотите править сами, запустите вместо этого такую команду. Тогда Certbot только получит сертификат, а ваши файлы не тронет:
sudo certbot certonly --nginxКак проверить, что сертификат продлевается
Сертификат Let’s Encrypt действует 90 дней, и в ближайшие годы Let’s Encrypt собирается сократить срок до 45 дней. Пакет snap ставит таймер systemd, который дважды в день запускает certbot и продлевает сертификаты, у которых срок подходит к концу. Один раз проверьте продление вхолостую и посмотрите на таймер:
sudo certbot renew --dry-run
systemctl list-timers | grep certbotПроверка должна закончиться строкой Congratulations, all simulated renewals succeeded. Она обращается к тестовому серверу Let’s Encrypt и ничего не меняет.
С июня 2025 года Let’s Encrypt больше не присылает писем перед окончанием срока. Время от времени смотрите дату окончания у каждого сертификата: sudo certbot certificates
Где Certbot хранит файлы
/etc/letsencrypt/live/example.com/— текущий сертификат. Nginx берёт отсюдаfullchain.pemиprivkey.pem./etc/letsencrypt/renewal/example.com.conf— как продлевается этот сертификат./var/log/letsencrypt/letsencrypt.log— подробный журнал каждого запуска.- Все сертификаты, их домены и сроки:
sudo certbot certificates
Файл privkey.pem держите в тайне: с ним кто угодно может выдать себя за ваш сайт. Не копируйте его на другие серверы и в репозиторий Git.
Частые ошибки Certbot
Could not automatically find a matching server block for example.com. Set the server_name directive to use the Nginx installer.— сертификат выпущен, но сайта с таким именем нет. Добавьте в свой сайтserver_name example.com;и проверьте настройки:sudo nginx -tПеречитайте настройки Nginx, а затем поставьте сохранённый сертификат:sudo certbot install --cert-name example.comTimeout during connect (likely firewall problem)— Let’s Encrypt не достучался до порта 80. Проверьте UFW, брандмауэр облачного провайдера и что Nginx запущен.DNS problem: NXDOMAIN looking up A for example.com— у домена ещё нет записи A или новая запись не разошлась. Проверьте её у своего DNS-провайдера и попробуйте позже. Мешает и старая запись AAAA, которая указывает на другой сервер.too many certificatesвместе сalready issued for this exact set of identifiers— Let’s Encrypt выдаёт не больше 5 сертификатов на один и тот же набор имён за 7 дней. Подождите, а изменения проверяйте с--dry-run, такие запуски не считаются.- При любой другой ошибке смотрите конец
/var/log/letsencrypt/letsencrypt.log.
Если вы работаете и на Mac

Сборка мусора в MacWashing находит кэш всех знакомых ей программ, в том числе спрятанный внутри их данных, а ещё журналы, мусор Xcode и остатки удалённых программ. Она показывает, сколько места занимает каждая находка, и очищает всё за один раз. Всё спорное остаётся без галочки, пока вы не решите.
Бесплатная пробная версия · macOS 14 и новее
Вопросы и ответы
Как пользоваться Certbot с Nginx?
Поставьте Certbot: sudo snap install --classic certbot Затем выполните: sudo certbot --nginx -d example.com Он получит сертификат, поправит сайт в Nginx и настроит продление.
Сертификат Let’s Encrypt правда бесплатный?
Да. Let’s Encrypt — некоммерческий удостоверяющий центр и денег за сертификаты не берёт. Браузеры доверяют им так же, как платным.
Нужно ли продлевать сертификат вручную?
Нет. Таймер Certbot продлевает его до окончания срока и перечитывает настройки Nginx. Один раз выполните эту команду, чтобы убедиться, что продление работает: sudo certbot renew --dry-run