Запасной вариант для Let's Encrypt — бесплатные автоматические УЦ

    Для многих Let's Encrypt стал неотъемлемой частью веб-разработки, а автоматическое обновление сертификата каждые 90 дней — рутинной процедурой. Фактически, сейчас это самый популярный удостоверяющий центр в интернете. Это великолепно, но и опасно.

    Возникает вопрос: а что, если серверы 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


    Нам нужен УЦ, который соответствует двум критериям:

    1. поддерживает ACME;
    2. выдаёт бесплатные сертификаты.

    Этим критериям соответствует норвежский УЦ под названием 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 [email protected] --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 — дело нескольких секунд.



    Специальное предложение удостоверяющего центра GlobalSign


    GlobalSign
    Компания

    Комментарии 34

      0
      Подскажите, у кого из этих УЦ можно в автоматическом режиме продлевать wildcard сертификаты?
        0
        А что вы понимаете под автоматическим режимом? Если что, я с lets encrypt-ом вполне автоматически продлеваю wildcard сертификаты безо всяких проблем. Почитав описание, вероятно ZeroSSL тоже так умеет.
          0
          А как вы продлеваете сертификаты LE? Я там вижу подтверждение по DNS, которое всегда разное. Как вы получаете эти записи для подтверждения чтобы перевыпустить сертификат?
            +1
            Обновляю зону скриптом через nsupdate.
              +2
              Если у вашего DNS-провайдера есть API (или вы поддерживаете свои зоны самостоятельно) — задача становится тривиальной. Для многих крупных компаний вроде амазоновского Route 53 тупо есть плагин для certbot`а.
                0
                del (ufo, забери комментарий, я ошибся веткой)
                +1
                На cloudflare можно делегировать зону, их dns api поддерживается штатным certbot.
                  0
                  опишу и я свой опыт:
                  — имеется wildcard
                  — домены за cloudflare

                  как работает:
                  — в виртуалке, где установлен certbot так же стоит плагин-провайдер, который по апи сам бегает в CF и ставит нужные записи (и чистит их).

                  мне же остается вызывать скрипт руками или ждать срабатывания по крону.

                  одна из вариаций скрипта:
                  certbot certonly --force-renewal --dns-cloudflare --dns-cloudflare-propagation-seconds 20 --dns-cloudflare-credentials /root/cf.ini -d *.domain.tld -d domain.tld
                  


                  запуск через докер, если есть доверие к чужому образу:
                  docker run --rm --interactive --tty -v /etc/letsencrypt:/etc/letsencrypt -v /var/log/letsencrypt:/var/log/letsencrypt -v /root/cf.ini:/etc/cloudflare.ini:ro horjulf/certbot-cloudflare renew --dns-cloudflare-credentials /etc/cloudflare.ini
                  

                    0

                    У acme.sh есть ряд популярных dns-сервисов: https://github.com/acmesh-official/acme.sh/tree/master/dnsapi


                    Правда, из-за этого надо на него переходить, может быть неудобно.

                    0
                    И да, под автоматическим режимом я имею в виду автоматический режим. Т.е. без участия человека.
                    0

                    del (ufo, забери комментарий, я ошибся веткой)

                    0

                    У меня домены делегированы на яндекс.Wildcard сертификаты автоматически генерятся через acme.sh. В целом, утилита умеет работать с некоторыми DNS-провайдерами.
                    Единственный момент в том, что проверка DNS-записей происходит через Cloudflare и таймаута между проверкой не всегда хватает (в моём случае). Я просто увеличил время ожидания в скрипте с 2 до 15 минут и всё.

                    +3
                    Когда я слышу слово: бесплатно/халява, я начинаю искать подвох и если он не виден явно, то моя паранойя орёт, как кот которому наступили на хвост.
                      0
                      А отсутствие бесплатных вариантов, при общей тенденции перетягивания всего и вся на tls, не заставило бы орать хвост вашего кота?
                        +3
                        Это заставило бы орать хвост жабы, но это уже совсем другая история… (с)
                          –2
                          Не бывает ничего бесплатного. Если что то вам предлагают на халяву и не просят ничего взамен, значит из вас как то по другому извлекли пользу.
                          В случае бесплатного IT решения завязанного на безопасность, это может быть анализ трафика(VPN, антивирусы и т.п.).
                            +1
                            Если что то вам предлагают на халяву и не просят ничего взамен, значит из вас как то по другому извлекли пользу.

                            Не совсем правда.
                            Если вам что-то досталось бесплатно, значит деньги были получены от кого-то другого

                            В случае Let's encrypt это точно известно — от спонсоров. Если считать только платиновых спонсоров, то это уже по $3kk+ в год, чего должно быть вполне достаточно, чтобы поддерживать инфраструктуру УЦ.

                              0
                              На мое ИМХО, главное тут гугель который очень не хочет делиться рекламой, и потому сильно желает весь трафик засунуть в https чтобы в него никто из провайдеров не залез.
                        –5
                        Мда-с, с корневым сертом, валидным аж до 2040 года, BuyPass не вызывает сомнений в своей долговечности… trollface.jpg
                          +1
                          Учитывая, что Вы получаете сертификаты только для https, со сроком годности несколько меньше чем до 2040, то какая разница?
                          Обновление сертификата (и смена сертификатодателя) дело нескольких секунд при условии полной автоматизации процесса.
                          +2
                          Вместо Certbot можно использовать другой клиент acme.sh
                          В копилку ACME-клиентов -> LeGo.

                          У Let's Encrypt может случиться даунтайм или он может временно приостановить деятельность — и тогда ...
                          Можно не ждать и заранее подстелить соломки:
                          $: grep 'ssl_cert' /etc/nginx/conf.d/domain.tld.conf 
                            ssl_certificate /var/acme/domain.tld/rsa/certificates/domain.tld.pem;
                            ssl_certificate_key /var/acme/domain.tld/rsa/certificates/domain.tld.pem;
                            ssl_certificate /var/acme/domain.tld/ec/certificates/domain.tld.pem;
                            ssl_certificate_key /var/acme/domain.tld/ec/certificates/domain.tld.pem;
                          В конфиге выше используются различные серты по типу, но тоже самое можно сделать и для сертов различных по провайдерам. И не только можно, но и нужно.
                            0
                            Еще в копилку клиентов — dehydrated. Пользуюсь вместе с LetsEncrypt на двух машинках, полёт нормальный.
                            0
                            Интересная идея, в доке про это ничего не сказано.
                            А какой из сертификатов отдается клиенту?
                            Первый из списка?
                            Первый валидный?
                            Любой валидный?
                              0
                              А какой из сертификатов отдается клиенту?
                              Для клиентов, которые не умеют SNI, первый из списка.
                              Всем остальным предлагается выбор из всего имеющегося.
                              Я провел тесты с набором из 12 одновременных сертификатов — к тем двум (на ключах ec384 и rsa2048) добавил 10 самоподписанных, по 5 с каждого краю от валидных, tls-сессия успешно устанавливалась со всеми, кто доверяет Let`s Encrypt.

                              Первый валидный?
                              Любой валидный?
                              Нет у сервера (тестировался nginx) полномочий решать о валидности прикрученных сертов. Решение за клиентом.
                                0
                                Круто. Очень полезная информация.
                            +2
                            Есть и другие преимущества: этот УЦ даёт бесплатные сертификаты не только на 90 дней, но и на 1 год

                            Не нашел бесплатных на год, просит как минимум Basic подписку за $10 в месяц
                              0
                              BuyPass заявляет
                              {«type»:«urn:ietf:params:acme:error:malformed»,«detail»:«Wildcard not supported, but *.domain.tld requested»,«code»:400,«message»:«MALFORMED_BAD_REQUEST»,«details»:«HTTP 400 Bad Request»}

                              Ну нормально. Но несколько неожиданно.
                                0
                                Никогда не испытовал серйозных проблем с обновлением сертифкатов от Let's Encrypt, но даже если были какие либо задержки, то в любом случае сертифкат по ACME автоматически обновляется с существенным запасом и всегда есть время решить возникший вопрос.

                                Что касается рутового сертификата от BuyPass, то с ним есть ряд проблем на разных версиях ОС, например на самой первой версии Windows7 а также, что странно, на MacOS Sierra. На этих ОС сертификат попросту не валиден, потому не всегда есть возможность использовать его как полноценную замену для Let's Encrypt. Но это лучшая альтернатива которую пока встречал. Тот же ZeroSSL, если не изменяет память, использует те же сертификаты от IdentTrust что и Let's Encrypt потому поддержка устройств будет такой же.

                                P.S. все проблемы со старыми устройствами были замечены только на бесплатных сертификатах, если брать даже самый дешевый платный сертифкат от того же Sectigo то там восе нет проблем, ну кроме разве отсутвия ACME.
                                  0
                                  В 2021 году сертификаты Let's Encrypt тоже перестанут приниматься в старых версиях Android (до 7.1.1) и необновлённых Windows (нужны обновления 2018 года).
                                    0
                                    Так и есть, именно по этой причине искал замену старому сертификату от Let's Encrypt и пока ничего лучше из бесплатно и с ACME кроме BuyPass не нашлось. У старого сертификата от Let's Encrypt есть еще момент не определенности в плане перехода остальных участников интернета на новый сертификат. Где-до месяц назад был пойман инциндент с блокировкой старого Let's Encrypt сертификата интернет провайдером клиента из Британии (с одного и того же устройства но с разными точками доступа сайт то работал, то сообщал о проблеме сертификата) что кстати очень настораживает. Потому уже сейчас на поготове решение для екстренного перехода в случае необходимости.

                                    P.S. платные сертифкаты не расматриваются потому как доменов слишком много да и без ACME их обновлять муторно.
                                  0
                                  этот УЦ даёт бесплатные сертификаты не только на 90 дней, но и на 1 год
                                  Разве? Посмотрел прайс-лист, годовой сертификат только за деньги.
                                    0
                                    Уточнение — у ZeroSSL бесплатно только 3 раза по 90 дней. Дальше, если хотите пользоваться, надо переходить на платный тариф.image

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                    Самое читаемое