Ответ
Let's Encrypt использует протокол ACME (Automated Certificate Management Environment) для автоматической проверки того, что заявитель контролирует домен. Валидация происходит перед выдачей сертификата.
Основные методы (challenge types):
-
HTTP-01 Challenge:
- Клиент ACME (например, Certbot) получает от сервера Let's Encrypt уникальный токен.
- Клиент размещает файл с этим токеном по пути
http://<YOUR_DOMAIN>/.well-known/acme-challenge/<TOKEN>на своём веб-сервере. - Let's Encrypt пытается получить этот файл по HTTP/HTTPS. Если запрос успешен, владение доменом подтверждено.
-
DNS-01 Challenge:
- Клиент получает токен и вычисляет для него специальное значение (digest).
- Клиент должен создать TXT-запись DNS для поддомена
_acme-challenge.<YOUR_DOMAIN>со значением этого digest. - Let's Encrypt запрашивает эту TXT-запись. Если она существует и значение совпадает, валидация пройдена. Этот метод позволяет получить wildcard-сертификаты (
*.example.com).
-
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 для полной автоматизации.