Как Let’s Encrypt осуществляет валидацию домена

«Как Let’s Encrypt осуществляет валидацию домена» — вопрос из категории Безопасность, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Let's Encrypt использует протокол ACME (Automated Certificate Management Environment) для автоматической проверки того, что заявитель контролирует домен. Валидация происходит перед выдачей сертификата.

Основные методы (challenge types):

  1. HTTP-01 Challenge:

    • Клиент ACME (например, Certbot) получает от сервера Let's Encrypt уникальный токен.
    • Клиент размещает файл с этим токеном по пути http://<YOUR_DOMAIN>/.well-known/acme-challenge/<TOKEN> на своём веб-сервере.
    • Let's Encrypt пытается получить этот файл по HTTP/HTTPS. Если запрос успешен, владение доменом подтверждено.
  2. DNS-01 Challenge:

    • Клиент получает токен и вычисляет для него специальное значение (digest).
    • Клиент должен создать TXT-запись DNS для поддомена _acme-challenge.<YOUR_DOMAIN> со значением этого digest.
    • Let's Encrypt запрашивает эту TXT-запись. Если она существует и значение совпадает, валидация пройдена. Этот метод позволяет получить wildcard-сертификаты (*.example.com).
  3. TLS-ALPN-01 Challenge:

    • Используется специальное расширение TLS (Application-Layer Protocol Negotiation).
    • Валидация происходит во время TLS-рукопожатия на порту 443. Полезно, когда нельзя использовать порт 80 для HTTP-01.

Практический пример с Certbot (HTTP-01):

# Certbot автоматически запустит временный веб-сервер, пройдёт валидацию и получит сертификат.
sudo certbot certonly --standalone -d example.com -d www.example.com

# Для автоматического обновления (renewal) можно использовать cron:
0 12 * * * /usr/bin/certbot renew --quiet

В DevOps-практике валидация часто интегрируется в CI/CD пайплайны или оркестраторы с помощью клиентов ACME (например, cert-manager для Kubernetes), которые автоматически создают и обновляют сертификаты, используя преимущественно DNS-01 challenge для полной автоматизации.