Возникает вопрос: а что, если серверы Let's Encrypt временно перестанут работать? Не хочется думать о возможных причинах сбоя. Но желательно предусмотреть запасной вариант. То есть такой же удобный автоматизированный центр бесплатной сертификации.
К счастью, запасные варианты есть. Как минимум два. Такие же бесплатные автоматизированные УЦ, созданные по образцу Let's Encrypt.
Протокол ACME
Все коммуникации с Let's Encrypt происходят про протоколу ACME (Automated Certificate Management Environment). Это открытый протокол для автоматизации взаимодействия с УЦ. В нём нет ничего специфичного для Let's Encrypt, его поддерживает несколько других УЦ.
Сейчас как раз тот момент, когда всё больше УЦ начинают работать через ACME. Это означает, что практически все наши инструменты, скрипты и процессы для получения сертификатов из Let's Encrypt будут отлично работать и с другими центрами, которые поддерживают ACME.
Чтобы перестроиться на другой УЦ, достаточно просто изменить адрес API в настроенных скриптах с
https://acme-v02.api.letsencrypt.org/directory
(Let's Encrypt) на https://api.buypass.com/acme/directory
(BuyPass, о нём см. ниже) или какой-нибудь другой.BuyPass
Нам нужен УЦ, который соответствует двум критериям:
- поддерживает ACME;
- выдаёт бесплатные сертификаты.
Этим критериям соответствует норвежский УЦ под названием BuyPass.
Бесплатная услуга называется BuyPass Go SSL: это автоматическая выдача и продление сертификатов + поддержка ACME. То, что и нужно.
Техническая документация объясняет, как настроить получение и обновление сертификата с помощью Certbot — официального клиента от Фонда электронных рубежей для работы с Let's Encrypt или любым другим УЦ, который поддерживает протокол ACME.
Регистрация в УЦ и получение сертификата в BuyPass элементарны, как и в случае Let's Encrypt, здесь никакой разницы.
Регистрация с указанием своего адреса электронной почты для уведомлений ('YOUR_EMAIL') и согласием на условия пользования (--agree-tos):
root@acme:~# certbot register -m 'YOUR_EMAIL' --agree-tos --server 'https://api.buypass.com/acme/directory'
Получение сертификата:
root@acme:~# certbot certonly --webroot -w /var/www/example.com/public_html/ -d example.com -d www.example.com --server 'https://api.buypass.com/acme/directory'
Впоследствии при необходимости используются другие команды Certbot для отзыва сертификата (
revoke
), продления истёкших сертификатов (renew
) и удаления сертификата (delete
).Команду продления рекомендуется поместить в cron и выполнять автоматически, чтобы на всякий случай проверять истёкшие сертификаты. Например, так:
#Cron-job scheduled under root to run every 12th hour at a specified minute (eg. 23, change this to your preference)
23 */12 * * * /opt/certbot/certbot-auto renew -n -q >> /var/log/certbot-auto-renewal.log
У BuyPass есть некоторые лимиты на ACME. Основной лимит — количество сертификатов на зарегистрированный домен (20 в неделю). Здесь имеется в виду та часть домена, которая куплена у регистратора доменных имён. То есть это лимит на все поддомены в общей сложности. Другой лимит — 5 дубликатов в неделю. Это лимит сертификатов на каждый конкретный поддомен. Есть лимиты на ошибки валидации — по 5 штук на аккаунт, на хост и в час.
Лимит запросов к конечным точкам
new-reg
, new-authz
и new-cert
: 20 в секунду. Лимит запросов к /directory
: 40 в секунду.Максимальное количество авторизаций в процессе (Pending Authorisations): 300 штук.
Вместо Certbot можно использовать другой клиент acme.sh, который тоже изначально настроен на Let's Encrypt, но легко направляется на другой УЦ с поддержкой ACME.
./acme.sh --issue --dns dns_cf -d example.com --server "https://api.buypass.com/acme/directory"
ZeroSSL
Ещё один УЦ, который выдаёт бесплатные 90-дневные сертификаты по протоколу ACME — это австрийский ZeroSSL.
В вышеупомянутой программе acme.sh есть поддержка ZeroSSL, так что зарегистрироваться очень просто:
acme.sh --register-account -m foo@bar.com --server zerossl
Далее одна команда для генерации сертификата:
acme.sh --issue --dns dns_cf -d example.com --server zerossl
Лимитов на обращение к API не существует. Есть и другие преимущества: этот УЦ даёт бесплатные сертификаты не только на 90 дней, но и на 1 год, есть панель веб-мониторинга и техподдержка.
Кстати, ZeroSSL генерирует сертификаты даже через веб-интерфейс, в пошаговом режиме с верификацией домена по электронной почте. Но для автоматизации такой способ, конечно, не годится.
Другие серверы ACME
Вот список всех известных серверов ACME. Их пока немного, но число растёт.
Let's Encrypt — выдающаяся организация, которая делает отличное дело. Но опасно класть все яйца в одну корзину. Чем больше УЦ работает по протоколу ACME и раздаёт бесплатные сертификаты в автоматическом режиме, тем более разнообразна и надёжна экосистема в целом.
У Let's Encrypt может случиться даунтайм или он может временно приостановить деятельность — и тогда на подстраховку придут Buypass и ZeroSSL. Наличие этих запасных вариантов в конечном итоге повышает доверие к самому Let's Encrypt, потому что это теперь не единая точка отказа. А сменить УЦ по ACME — дело нескольких секунд.
DmitriyTitov
Подскажите, у кого из этих УЦ можно в автоматическом режиме продлевать wildcard сертификаты?
Evengard
А что вы понимаете под автоматическим режимом? Если что, я с lets encrypt-ом вполне автоматически продлеваю wildcard сертификаты безо всяких проблем. Почитав описание, вероятно ZeroSSL тоже так умеет.
DmitriyTitov
А как вы продлеваете сертификаты LE? Я там вижу подтверждение по DNS, которое всегда разное. Как вы получаете эти записи для подтверждения чтобы перевыпустить сертификат?
AEP
Обновляю зону скриптом через nsupdate.
ky0
Если у вашего DNS-провайдера есть API (или вы поддерживаете свои зоны самостоятельно) — задача становится тривиальной. Для многих крупных компаний вроде амазоновского Route 53 тупо есть плагин для certbot`а.
Stam_emg
del (ufo, забери комментарий, я ошибся веткой)
inkvizitor68sl
На cloudflare можно делегировать зону, их dns api поддерживается штатным certbot.
Stam_emg
опишу и я свой опыт:
— имеется wildcard
— домены за cloudflare
как работает:
— в виртуалке, где установлен certbot так же стоит плагин-провайдер, который по апи сам бегает в CF и ставит нужные записи (и чистит их).
мне же остается вызывать скрипт руками или ждать срабатывания по крону.
одна из вариаций скрипта:
запуск через докер, если есть доверие к чужому образу:
Xobotun
У acme.sh есть ряд популярных dns-сервисов: https://github.com/acmesh-official/acme.sh/tree/master/dnsapi
Правда, из-за этого надо на него переходить, может быть неудобно.
DmitriyTitov
И да, под автоматическим режимом я имею в виду автоматический режим. Т.е. без участия человека.
romanere
Через API CloudFlare.
certbot-dns-cloudflare.readthedocs.io/en/stable
trawl
del (ufo, забери комментарий, я ошибся веткой)
trawl
У меня домены делегированы на яндекс.Wildcard сертификаты автоматически генерятся через acme.sh. В целом, утилита умеет работать с некоторыми DNS-провайдерами.
Единственный момент в том, что проверка DNS-записей происходит через Cloudflare и таймаута между проверкой не всегда хватает (в моём случае). Я просто увеличил время ожидания в скрипте с 2 до 15 минут и всё.