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 — исправляй. Это пять минут работы. Я серьёзно.

Расскажу подробнее про мой опыт с Let’s Encrypt, потому что это одна из тех историй, где страх оказался гораздо больше, чем реальная сложность. Начну с того, почему я вообще боялся SSL. Честно: SSL казался мне чем-то сложным. Платные сертификаты, заполнение CSR, ожидание подтверждения от удостоверяющего центра — всё это отпугивало. Я представлял себе бюрократию, формы, дни ожидания. Мой первый сайт висел на голом HTTP, и меня это не парило. Пока Chrome не начал показывать «Не защищено» прямо в адресной строке. Гости заходили и видели красный значок. И тут я понял, что это не просто косметика — это сигнал недоверия. Конверсия? Какая конверсия, когда тебя помечают как опасного.

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

Ставлю Certbot. Certbot — официальный клиент Let’s Encrypt. На Ubuntu ставится из репозитория. На моей Ubuntu 24.04 версия уже не совсем свежая, но для дела хватит. Команда простая: sudo apt install certbot python3-certbot-nginx. И тут ключевой момент — python3-certbot-nginx. Это плагин, который сам правит конфиги nginx. Если пропустить этот пакет, придётся всё делать руками: вручную подставлять пути к сертификатам в конфиги веб-сервера. Я чуть не пропустил этот пакет, но вовремя вспомнил — и сэкономил себе час возни. Внимательно читайте команду установки.

Дальше — получить сертификат. Команда тривиальная: sudo certbot —nginx -d mysurik.ru -d www.mysurik.ru. Certbot проверяет, что домен действительно мой (через http-01 challenge), затем выпускает сертификат и сразу же подставляет его в nginx. Я просто обновил страницу — и сайт уже на HTTPS. Зелёный замочек в строке — я смотрел на него минуту, не веря, что это так просто. Вся магия произошла за считанные секунды. Certbot сделал всё сам: и проверку домена, и выпуск сертификата, и настройку nginx. Мне не пришлось ничего делать вручную. Это был момент прозрения: оказывается, SSL — это просто.

Автообновление — магия. Сертификаты 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. Это несложно, но нужно знать, как это делается. Я добавил редирект 301 с http на https для всех запросов. Без этого посетители могли попадать на http-версию, и сайт «двоился» бы в глазах поисковиков. Редирект — обязательная часть перехода на HTTPS.

Вторая проблема — я случайно удалил сертификат. Пытался почистить nginx-конфиги от мусора и грохнул папку с сертификатами. Это была моя ошибка: я неаккуратно удалял файлы и задел папку /etc/letsencrypt. На минуту я запаниковал: сайт без сертификата — это красный замок. Но выход нашёлся быстро: certbot позволяет просто запустить ещё раз — он увидит, что сертификата нет, и выпустит новый. Я перевыпустил сертификат за минуту. Этот случай научил меня быть аккуратнее с файлами и не чистить то, чего не понимаю.

Третья проблема — на одном из поддоменов сертификат не обновился автоматически. Оказалось, nginx не перечитывал конфиги после обновления. Это классическая проблема: сертификат обновился, а веб-сервер продолжает использовать старый. Пришлось добавить в крон перезагрузку nginx после обновления сертификата. Certbot поддерживает хуки: sudo certbot renew —post-hook «systemctl reload nginx». В /etc/letsencrypt/cli.ini я прописал эту опцию, чтобы не забывать. Теперь после каждого обновления сертификата nginx автоматически перезагружается. Эта мелочь избавила меня от головной боли с поддоменами.

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, но это отдельная история. Зато теперь wildcard-сертификат закрывает все поддомены сразу.

Что я вынес из этого опыта. Первое — HTTPS это не страшно. Let’s Encrypt сделал получение сертификата делом пяти минут. Второе — автоматизация решает всё: таймер certbot обновляет сертификаты сам, а post-hook перезагружает nginx. Третье — плагин python3-certbot-nginx экономит кучу времени, он сам настраивает веб-сервер. Четвёртое — будьте аккуратны с файлами сертификатов, но даже если вы их удалите — перевыпуск занимает минуту. Пятое — для wildcard нужен DNS-01 challenge, и его лучше автоматизировать через API DNS-провайдера.

Ещё один момент — про проверку. Я раз в месяц мельком проверяю, что таймер certbot жив и сертификаты на месте. Команда certbot certificates показывает все сертификаты и даты истечения. Это занимает десять секунд и даёт уверенность. Плюс я настроил уведомление на почту: если сертификат не обновится, я узнаю об этом заранее. Проверка сертификатов — это гигиена, которая занимает минуты, но экономит нервы. Не ленитесь проверять, даже с автоматизацией.

Ещё про почтовый сервер. Я подключил Let’s Encrypt и для почты: сертификат на mail-поддомен, чтобы почта ходила по шифрованным соединениям. Это тоже делается через certbot за пару минут. Современные почтовые серверы проверяют сертификаты, и письма с неправильным сертификатом могут не приниматься. Так что HTTPS — это не только про сайты, но и про почту. Закройте сертификатами все свои сервисы, которые смотрят наружу. Это база современного интернета.

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

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

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