Сертификаты 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-сервера.