В материале объяснили, как настроить автоматическое обновление SSL-сертификатов Let's Encrypt на VPS, чтобы не следить вручную за сроком их действия.
Введение
Если вы используете бесплатные SSL-сертификаты Let's Encrypt, важно помнить, что срок их действия всего 90 дней. Let's Encrypt — бесплатный центр сертификации, выпускающий SSL-сертификаты для HTTPS-трафика. Такой короткий период выбран не случайно: он призван побудить администраторов сразу настроить автоматическое обновление. Конечно, можно каждые три месяца продлевать сертификат вручную, но легко пропустить срок и однажды обнаружить, что сайт остался без защищённого соединения. Браузеры начнут пугать посетителей предупреждениями о небезопасности, чего не хочется допускать. К счастью, автообновление сертификатов на сервере решает эту проблему раз и навсегда.
В статье рассказали, как установить утилиту Certbot на VPS с Ubuntu и получить первый SSL-сертификат Let's Encrypt для своего сайта. Дали инструкцию по автоматическому продлению сертификата через планировщик cron и научили проверять результат обновления сертификата.
Установка Certbot
Начните с установки Certbot — это официальный инструмент от Let's Encrypt, который берёт на себя всю рутину с выпуском и продлением сертификатов. В Ubuntu поставить его можно через apt:
sudo apt update
sudo apt install certbot
Команды обновят индекс пакетов и установят Certbot на сервер. Важно запускать их именно на том сервере, для которого вы планируете выпускать сертификат, ведь валидация домена будет проходить через него. После установки проверьте версию командой certbot --version, чтобы убедиться, что Certbot успешно загрузился.
Получение первого SSL-сертификата
После установки Certbot пора выпустить первый сертификат для сайта. Утилита поддерживает плагины для автоматической настройки популярных веб-серверов. Например, если у вас Nginx, выполните команду:
sudo certbot --nginx
Если используется Apache, замените опцию --nginx на --apache. В интерактивном режиме Certbot спросит ваш e-mail, на него придут оповещения, если сертификат не удастся обновить вовремя, и доменное имя, для которого нужен сертификат. Перед запуском Certbot придётся подтвердить, что вы согласны с правилами использования Let's Encrypt. После этого клиент сам запросит и установит сертификат для вашего сервера, ничего вручную настраивать не придётся.
Перед запуском Certbot убедитесь, что доменное имя уже указывает на ваш сервер, то есть, DNS настроен верно, и порт 80 открыт в файрволе. Let’s Encrypt подключается к серверу по HTTP для подтверждения прав на домен.
Если всё прошло успешно, в консоли появится сообщение о выдаче сертификата. Certbot может спросить, перенаправлять ли автоматически весь HTTP-трафик на HTTPS. Рекомендуем согласиться, чтобы пользователи всегда попадали на защищённую версию сайта. Теперь ваш сайт должен открываться по https:// с действующим сертификатом, в браузере будет значок замка.

Ручное продление сертификата и его минусы
Продлить выпущенные сертификаты вручную можно командой:
sudo certbot renew
Она проверит сроки и обновит сертификат, если до окончания его действия осталось меньше 30 дней. Однако полагаться на ручной запуск — не лучший план. Легко забыть вовремя выполнить обновление, особенно на продакшене, и сайт окажется с просроченным SSL. Даже несколько часов без шифрования представляют серьёзный риск для репутации и безопасности ресурса. Гораздо легче сразу поручить эту задачу автоматике, благо Certbot изначально создан для этого.
Настройка автоматического продления через cron
Самое время настроить планировщик cron, чтобы Certbot сам продлевал сертификат. Откройте crontab командой:
sudo crontab -e
И вставьте строку, например:
30 3 * * * /usr/bin/certbot renew --quiet
Теперь Certbot будет запускаться каждый день в 3:30 ночи и проверять, пора ли обновлять сертификат. Флаг --quiet отключает подробный вывод, чтобы cron не слал вам письма при каждом запуске задачи.
Учтите, Certbot продлевает сертификат только когда до окончания действия остаётся меньше 30 дней, поэтому задачу можно запускать хоть ежедневно. Пока сертификат свежий, обновления не произойдёт, но как только до истечения срока останется меньше месяца, Certbot автоматически продлит его.
После успешного обновления сертификата нужно перезагрузить веб-сервер, чтобы он начал использовать новый ключ и цепочку. Проще всего добавить ещё одну cron-задачу несколькими минутами позже. Например, для Nginx можно указать:
35 3 * * * service nginx reload
Эта команда будет перезапускать Nginx каждый день в 3:35, через 5 минут после обновления сертификата. Этого достаточно, чтобы Certbot успел обновить сертификат при необходимости. Если у вас Apache, добавьте аналогичную команду:
service apache2 reload
Ежедневная перезагрузка занимает считанные секунды и практически не влияет на работу сайта, зато вы уверены, что сервер всегда использует актуальный сертификат.
Обновление через systemd-таймер
Современные дистрибутивы Linux используют systemd, и Certbot умеет работать через него. При установке Certbot обычно автоматически добавляется таймер certbot.timer, который запускает обновление сертификатов в фоновом режиме. Проверить его можно командой:
sudo systemctl list-timers | grep certbot
Если в выводе есть certbot.timer, значит этот механизм уже активен и сам запускает certbot renew по расписанию, как правило, дважды в день. Если таймер не включён, активируйте его командой:
sudo systemctl enable --now certbot.timer
После этого управление продлением сертификатов перейдёт к systemd. Выбирайте тот метод, который вам удобнее, но не используйте одновременно cron и systemd-таймер.
Проверка автоматического обновления
Настроив автопродление, убедитесь, что оно работает. Проще всего выполнить тестовый запуск:
sudo certbot renew --dry-run
Certbot имитирует процесс продления без выпуска нового сертификата на тестовых серверах Let's Encrypt. Если увидите сообщение об успешном dry-run, значит всё настроено верно и реальное обновление пройдёт без ошибок.
Также вы можете проверить дату истечения сертификата через certbot certificates или командой OpenSSL. Например:
openssl x509 -noout -enddate -in /etc/letsencrypt/live/ВАШ-ДОМЕН/fullchain.pem
Это покажет строку notAfter с датой окончания действия. Сравните её с текущей, после автоматического продления дата должна сдвинуться примерно на 90 дней вперёд.
Дополнительно убедитесь, что сайт открывается по HTTPS без ошибок. Можно сделать HTTP-запрос утилитой curl, например, curl -I https://ваш-домен, либо просто зайти на страницу в браузере и проверить информацию о сертификате. Если сертификат обновлён, соединение установится нормально, а в деталях сертификата отобразится новый срок действия.
Если при выпуске сертификата вы указывали e-mail, то вы получите от Let's Encrypt письмо примерно за 20 дней до истечения, если сертификат вдруг не обновится. Но лучше не полагаться только на это и периодически самостоятельно проверять корректную работу автообновления.
Как обезопасить себя
Напоследок дадим пару советов по безопасности. Файлы сертификатов и приватных ключей в каталоге /etc/letsencrypt/ храните в защищённом месте. Убедитесь, что права доступа к ним ограничены. Certbot обычно сам настраивает нужные разрешения, и только root имеет доступ к ключам. Никогда не публикуйте приватные ключи в открытом виде и не передавайте их посторонним.
Также стоит регулярно делать резервные копии сертификатов. Достаточно сохранить папку /etc/letsencrypt в безопасном месте, например, на другом сервере или в облачном хранилище. Если с вашим VPS что-то случится или вы решите перенести сайт, у вас будет под рукой бекап SSL-сертификатов и ключей. Это избавит от спешного повторного выпуска сертификата и упростит восстановление HTTPS на новом месте.
Автоматизация продления SSL-сертификатов избавляет от лишних хлопот и снижает риск простоя сайта. Один раз настроив обновление, вы можете не переживать, что сертификат внезапно истечёт и вызовет проблемы. Сайт всегда будет обслуживать действующий SSL, а сэкономленные время и нервы вы потратите на развитие своего проекта.
Читайте в блоге:
- Как защитить Apache с помощью Let's Encrypt в Ubuntu 20.04 и 22.04
- Установка сертификата Let’s Encrypt на OpenLiteSpeed: пошаговая инструкция
- Настройка редиректа с HTTP на HTTPS в Nginx без ошибок