mysurik.ru

Let’s Encrypt: как я настроил SSL и забыл про сертификаты навсегда

Let's Encrypt SSL сертификаты настройка

Почему я боялся SSL

Честно: SSL казался мне чем-то сложным. Платные сертификаты, заполнение CSR, ожидание подтверждения — всё это отпугивало. Мой первый сайт висел на голом HTTP, и меня это не парило. Пока Chrome не начал показывать «Не защищено» прямо в адресной строке.

Гости заходили и видели красный значок. Конверсия? Какая конверсия, когда тебя помечают как опасного.

Let’s Encrypt изменил всё. Бесплатные сертификаты, автоматическое обновление, никакой бюрократии. За 5 минут ты получаешь HTTPS, и браузер тебе доверяет. Но обо всём по порядку.

Ставлю Certbot

Certbot — официальный клиент Let’s Encrypt. На Ubuntu ставится из репозитория. На моей Ubuntu 24.04 версия уже не совсем свежая, но для дела хватит:

sudo apt install certbot python3-certbot-nginx -y

Ключевой момент — python3-certbot-nginx. Это плагин, который сам правит конфиги nginx. Если пропустить этот пакет, придётся всё делать руками.

Дальше — получить сертификат. Команда тривиальная:

sudo certbot --nginx -d mysurik.ru -d www.mysurik.ru

Certbot проверяет, что домен действительно мой (через http-01 challenge), затем выпускает сертификат и сразу же подставляет его в nginx. Я просто обновил страницу — и сайт уже на HTTPS. Зелёный замочек в строке — я смотрел на него минуту, не веря, что это так просто.

Автообновление — магия

Сертификаты Let’s Encrypt живут 90 дней. Потом надо обновлять. Если забудешь — сайт перестанет открываться по HTTPS. Звучит страшно, но certbot сам ставит systemd-таймер, который проверяет сертификаты дважды в день и обновляет, если до истечения осталось меньше 30 дней.

Проверить статус таймера:

sudo systemctl status certbot.timer

Работает. Я сначала не поверил и решил проверить вручную — запустил сухое обновление:

sudo certbot renew --dry-run

Всё ок. Теперь я про сертификаты забыл. Честно, я даже не вспоминаю про них, пока не вижу где-нибудь кнопку «проверить SSL».

Что пошло не так

Первая проблема — www-редирект. Когда certbot подставил сертификат, он сконфигурировал nginx слушать 443 с mysurik.ru и www.mysurik.ru. Но редирект с HTTP на HTTPS остался недонастроенным. Пришлось вручную править server-блоки в /etc/nginx/sites-available/default.

Вторая проблема — я случайно удалил сертификат. Пытался почистить nginx-конфиги от мусора и грохнул папку с сертификатами. Пришлось перевыпускать. Certbot позволяет просто запустить ещё раз — он увидит, что сертификата нет, и выпустит новый.

Третья — на одном из поддоменов сертификат не обновился автоматически. Оказалось, nginx не перечитывал конфиги после обновления. Пришлось добавить в крон перезагрузку nginx после обновления сертификата. Certbot поддерживает хуки:

sudo certbot renew --post-hook "systemctl reload nginx"

В /etc/letsencrypt/cli.ini я прописал эту опцию, чтобы не забывать.

Wildcard-сертификат

Когда я завёл второй поддомен, захотелось wildcard — чтобы *.mysurik.ru был покрыт одним сертификатом. Let’s Encrypt его даёт, но через DNS-01 challenge. Пришлось подтверждать владение доменом через DNS-запись.

С Certbot это выглядит так:

sudo certbot certonly --manual --preferred-challenges dns -d *.mysurik.ru -d mysurik.ru

Certbot выдаёт TXT-запись, я захожу в панель управления DNS (у меня Cloudflare), добавляю её, жду пару минут и нажимаю Enter. Сертификат выпущен. Но обновлять вручную — боль. Пришлось автоматизировать через API Cloudflare, но это отдельная история.

Итог

Сейчас HTTPS стоит везде. Основной домен, три поддомена, даже почтовый сервер. Всё через Let’s Encrypt. Сертификаты обновляются сами, я только раз в месяц мельком проверяю, что таймер жив.

Let’s Encrypt — лучший подарок вебу от некоммерческих организаций. Бесплатно, надёжно, автоматически. Если ты до сих пор без HTTPS — исправляй. Это пять минут работы. Я серьёзно.

Ваш комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *