ADG Оставить заявку
Блог Информационная безопасность 3 мин чтения

Let's Encrypt GA: перевели всех клиентов на бесплатный TLS и забыли про продление

Let's Encrypt вышел из беты в апреле 2016. Прогнали certbot по всем managed-клиентам, настроили cron - трудозатраты на продление сертификатов упали до нуля.

Контекст момента

Let's Encrypt объявил GA в апреле 2016 - статус беты снят, ISRG выдаёт сертификаты в production-режиме

В апреле Let's Encrypt объявил выход из беты. С точки зрения технической стороны ничего кардинально не изменилось - ACME-протокол работал и до этого, certbot выдавал сертификаты без проблем. Но психологически разница ощутимая: теперь это не «поиграться с новым инструментом», а полноправный production-CA с поддержкой нескольких миллионов доменов. Коммерческим CA стало сложнее объяснять, зачем платить 50-100 долларов в год за то, что теперь доступно бесплатно и автоматически.

Мы не ждали GA - переходили постепенно с ноября 2015-го. Но объявление стало удобным поводом закрыть хвосты: несколько клиентских проектов всё ещё держали платные сертификаты не из технической необходимости, а по инерции. «Оно работает, зачем трогать.» Вот зачем.

Что делали

Прошлись по всем хостам managed-сопровождения. Картина оказалась примерно такой:

  • Большинство проектов - уже на certbot с декабря, cron настроен, обновляется исправно.
  • Несколько проектов - платные сертификаты с ручным продлением. Кто-то купил на три года и «всё нормально», кто-то просто не дошли руки переехать.
  • Пара нестандартных случаев - wildcard-домены, где certbot без DNS-валидации не справится, и один проект с EV-сертификатом, где зелёная строка с названием компании - часть требований заказчика.

Первые две группы перевели полностью. Третью оставили как есть - certbot до wildcard через DNS-challenge ещё не дорос в удобном виде, а EV - отдельная история про юридическую верификацию, которую автоматизировать нельзя по определению.

Для перевода использовали ту же Ansible-роль, которую написали в декабре. Плейбук, список доменов в переменных, запуск - сертификаты получены, nginx перезагружен, cron раскатан. На хост уходило минут пять реального времени, остальное делал Ansible.

Что изменилось по сравнению с декабрём

В certbot за полгода поправили несколько неудобств. Команда certbot renew теперь сама читает конфиг выданных сертификатов и знает, какой webroot и какие домены использовались при выдаче - не нужно повторять все флаги в cron. Это убрало целый класс проблем, когда команда продления и команда выдачи расходились в параметрах.

Ещё добавили --renew-hook - хук, который запускается только если сертификат реально обновился. Раньше приходилось делать certbot renew && systemctl reload nginx, что перезагружало nginx даже если сертификат не обновлялся (до 30 дней до истечения certbot не трогает). Теперь:

0 4 * * 2 certbot renew --quiet --renew-hook "systemctl reload nginx"

Выглядит как мелочь, но для хостов с несколькими сайтами и разными сертификатами - заметное улучшение: nginx перезагружается только когда нужно.

Про мониторинг срока

Оставили Zabbix-проверку на дату истечения сертификата, хотя certbot с исправным cron теоретически не должен давать сертификатам протухать. Практически - cron ломается по разным причинам, хост уходит в обслуживание, кто-то правит crontab руками. Алерт за 20 дней до истечения - страховка на такой случай. Два раза за полгода срабатывал по делу.

Что со стоимостью

Прямая экономия на сертификатах - не главный эффект. Главный - трудозатраты на продление упали до нуля. Раньше продление сертификата это: вспомнить что скоро истекает (или получить письмо от CA), сгенерировать CSR, отправить в CA, дождаться выдачи, обновить на сервере, проверить. Полчаса-час, а если домен с верификацией через email - зависит от того, кто владеет ящиком и насколько быстро ответит. Теперь это не задача вообще - просто работает.

Платные сертификаты на managed-проектах остались только там, где они нужны по техническим или требованиям заказчика: EV и те самые wildcard-случаи. Всё остальное - Let's Encrypt.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.