Сертификаты ACME

SSL-сертификаты от Let’s Encrypt.

Содержание

1 Общая информация

  • Сайт: https://letsencrypt.org/
  • Использует протокол ACME для выдачи сертификата.
  • Наиболее известным провайдером сертификатов, выдаваемых по протоколу ACME, является Let’s Encrypt.

2 Провайдеры

3 Инструментарий

4 Тестирование работы выдачи сертификатов ACME

  • Проверить на проблемы работу Let’s Encrypt можно с помощью сайта: https://letsdebug.net/.
  • Видимость Ваших ресурсов из внешних сетей можно проверить на сайте https://check-host.net/.

5 Проверки ACME

  • Для выдачи сертификата необходимо верифицировать хост, которому выдаётся сертификат.

5.1 Проверка HTTP-01

  • Этот тип проверки используется чаще всего.
  • Let’s Encrypt выдаёт ACME-клиенту токен, а ACME-клиент записывает этот токен в файл на web-сервере по пути http://<YOUR_DOMAIN>/.well-known/acme-challenge/<TOKEN>.
    • В этом файле содержится сам токен, плюс отпечаток ключа вашего аккаунта.
    • Как только ACME-клиент сообщит Let’s Encrypt, что файл готов, Let’s Encrypt будет пытаться получить этот файл по URL (возможно, несколько раз, с различных адресов).
    • Если полученный ответ будет верным, проверка считается успешной, и сертификат для выбранного домена готов к использованию.
    • Если проверка прошла неудачно, требуется повторить попытку с новым сертификатом.
  • Реализация проверки HTTP-01 разрешает редиректы запросов, общим числом не более 10.
    • Редиректы принимаются только на адреса, начинающиеся с http: или https:, и только на порты 80 или 443.
    • Редиректы на IP-адреса не принимаются.
    • Если редирект выполнялся на URL c HTTPS, то сертификат не считается подтверждённым (т.к. проверка для новых сертификатов, может обнаружить самоподписанные или просроченные сертификаты).
  • Проверка HTTP-01 выполняется только с использованием порта 80. Произвольный порт для проверки снижает надёжность, и потому запрещён стандартом ACME.
  • Плюсы:
    • Упрощённая автоматизация процесса, не требующая дополнительных знаний по настройке доменов.
    • Выпуск сертификатов для доменов хостинг-провайдеров, привязанных по CNAME.
    • Совместим с уже настроенными web-серверами.
  • Минусы:
    • Требует открытого порта 80.
    • Let’s Encrypt не разрешает использовать эту проверку для сертификатов с подстановкой (wildcard-сертификатов).
    • Для каждого web-сервера требуется свой файл.

5.2 Проверка DNS-01

  • Эта проверка требует подтверждения прав на домен с помощью специальной TXT-записи для доменного имени.
    • Проверка DNS-01 разрешает выпускать сертификаты с подстановкой (wildcard-сертификаты).
    • После того, как Let’s Encrypt передаёт ACME-клиенту токен, клиент создаёт содержимое TXT-записи на основе токена и ключа аккаунта, и записывает её в _acme-challenge.<YOUR_DOMAIN>.
    • Далее, Let’s Encrypt запрашивает TXT-запись в DNS-зоне домена. Если значения совпадают, то сертификат готов к использованию!
  • Для автоматизации процесса выпуска и отзыва сертификатов желательно, чтобы DNS-провайдер предоставлял API для автоматических обновлений.
  • Let’s Encrypt придерживается стандартов DNS для поиска TXT-записи при проверке DNS-01, поэтому можно задействовать записи CNAME или NS для делегирования права ответа за другие DNS-зоны.
    • Например настроив субдомен _acme-challenge для специального сервера валидации.
  • Для одного и того же доменного имени допускается несколько TXT-записей.
    • Например, когда требуется одновременно выполнить проверку и для обычного сертификата, и для wildcard-сертификата.
  • Рекомендуется удалять неактуальные TXT-записи, т.к. из-за большого размера ответа сервера при проверке Let’s Encrypt признает проверку неудачной.
  • Плюсы:
    • Подходит для сертификатов с подстановкой (wildcard-сертификатов).
    • Одна запись для нескольких web-серверов.
  • Минусы:
    • У DNS-провайдера может не быть своего API.
    • Хранение учётной записи для DNS API небезопасно.
    • DNS API может не быть методов оценки период обновления записей.

5.3 Проверка TLS-ALPN-01

  • Замена проверки TLS-SNI-01.
  • Проверка TLS-ALPN-01 выполняется через TLS handshake на порте 443.
  • Плюсы:
    • Будет работать даже если порт 80 закрыт.
    • Реализована целиком внутри слоя TLS
  • Минусы:
    • Пока не поддерживается Apache, Nginx или Certbot, и, возможно, не будет поддерживаться.
    • Как и для проверки HTTP-01, настраивать нужно ответ от каждого web-сервера.

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие