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.
- Let's Encrypt публичная бета: десять сервисов на TLS за один вечер · 3 ноября 2015
- certbot + Ansible: TLS-сертификат как одна задача в плейбуке · 25 декабря 2015