bg-tutorials

Как исправить ошибки SSL-сертификата ACME

Ошибки ACME SSL

Когда Вы устанавливаете или обновляете SSL-сертификаты по протоколу ACME, нередко возникают загадочные ошибки, которые останавливают процесс на полпути. Это руководство проведет Вас по наиболее распространенным проблемам, связанным с ACME, объяснит, что они означают, и покажет Вам, как их исправить. Если Вы устанавливаете новый сертификат, автоматизируете продление или отлаживаете неудачную проверку, Вам следует начать именно с этого руководства.


Отсутствует или недействительна привязка внешнего аккаунта

Эта ошибка появляется, когда сервер ACME требует привязки внешней учетной записи (External Account Binding, EAB), но Ваш клиент не отправил действительные учетные данные или пропустил их совсем. EAB — это способ подтвердить, что Вам разрешено использовать определенный сервер ACME.

Как это исправить:

  1. Дважды проверьте Ваш идентификатор ключа и ключ HMAC: Убедитесь в том, что они оба правильные и точно соответствуют указанным. Никаких скрытых пробелов или переносов строк.
  2. Используйте правильный URL ACME Directory: Некоторые клиенты позволяют Вам передавать —server. Не путайте производственные и промежуточные URL.
  3. Добавьте флаги EAB: Если Вы используете acme.sh, флаги должны выглядеть следующим образом: —eab-kid —eab-hmac-key
  4. Обновите Ваш клиент ACME: Если клиент устарел, обновите его. Новые версии имеют лучшую поддержку EAB.

Аккаунт не существует

Ошибка urn :ietf:params:acme:error:accountDoesNotExist появляется, когда Ваш клиент ACME пытается использовать локальный ключ учетной записи (тот, что хранится в его папке конфигурации), который ЦС не распознает.

Проще говоря, Ваш клиент ACME обращается к несуществующей учетной записи, которая была удалена на стороне ЦС. Такое часто случается, когда Вы переустанавливаете клиента, переносите серверы или переключаетесь между конечными точками staging и production.

Как это исправить:

1. Перерегистрируйте свою учетную запись ACME: При регистрации используйте правильные учетные данные для привязки внешнего аккаунта (EAB).
Пример для acme.sh:

acme.sh --register-account \
--server https://acme.your-ca.com/v2/DV \
--eab-kid YOUR_EAB_KID \
--eab-hmac-key YOUR_EAB_HMAC_KEY \
--accountemail [email protected]

2. Проверьте URL-адрес сервера ACME: Убедитесь, что Вы регистрируетесь в правильной конечной точке, соответствующей Вашему заказу.

3. Избегайте повторного использования файлов учетных записей: Не перемещайте account.conf или ключи учетных записей между серверами или клиентами, если Вы не уверены на 100%, что они действительны для одного и того же ЦС и окружения.


Плохой нонс или ошибка анти-воспроизведения

Ваш клиент ACME отправил запрос с использованием nonce (одноразового маркера от ЦС), который уже был использован, истек или недействителен. Сервер блокирует его, чтобы предотвратить атаки повторного воспроизведения. urn :ietf:params:acme:error:badNonce — это, как правило, временная проблема, вызванная нарушением синхронизации, задержкой запросов или несовпадением часов.

Как это исправить:

1. Просто повторите запрос: Большинство клиентов ACME (например, acme.sh) автоматически повторят запрос, если получат ошибку badNonce. Если нет, повторите последнюю команду вручную. Она должна сработать со второй попытки.

2. Синхронизируйте часы Вашего сервера: Перекос системного времени может привести к ошибкам воспроизведения. Бег:

timedatectl status
timedatectl set-ntp true

Или убедитесь, что ntpd или chronyd работают правильно.

3. Проверьте, нет ли задержек в работе прокси или CDN: Если Вы находитесь за Cloudflare, балансировщиком нагрузки или медленным прокси, он может задерживать Ваши запросы настолько, чтобы сделать недействительным nonce. Попробуйте временно обойти его.


Запрашиваемый идентификатор не был делегирован

Когда появляется ошибка urn :ietf:params:acme:error:rejectedIdentifier, сервер ACME отклонил одно или несколько доменных имен, которые Вы пытались подтвердить. Обычно это происходит потому, что:

  • Домен не существует в публичном DNS
  • Отсутствует запись DNS, указывающая на Ваш сервер
  • Домен не авторизован для выпуска сертификатов

Проще говоря, ЦС не может проверить, что Вы владеете или контролируете этот домен.

Как это исправить:

1. Используйте правильный формат в своей команде: Включите только доменное имя. Никаких протоколов, косых черт или полных URL.

  • Правильно: -d example.com
  • Неправильно: -d http://example.com

2. Убедитесь, что домен существует и разрешается. Бег:

dig example.com +short

Если результата нет, значит, Ваш домен еще не работает, сначала исправьте настройки DNS.

2. Сверьте Ваш заказ ACME: Если Вы используете коммерческий сертификат ACME, убедитесь, что домен, для которого Вы выпускаете сертификат, указан в оригинальном заказе. Вы не можете добавлять домены «на лету». Они должны быть предварительно одобрены.

3. Следите за опечатками и путаницей поддоменов: Дважды проверьте такие вещи, как www.example.com против example.com. Они рассматриваются как отдельные записи.


Неавторизованный или недействительный ответ

Центр сертификации не смог проверить принадлежность Вашего домена. Чаще всего он не смог получить доступ к файлу вызова ACME, который Ваш клиент разместил на сервере. Это проблема HTTP-валидации: центр сертификации пытался обратиться к Вашему сайту, но не смог найти или прочитать вызов.

Точное сообщение об ошибке — urn :ietf:params:acme:error:unauthorized. Оно также может выглядеть как: «Неверный ответ от http://yourdomain.com/.well-known/acme-challenge/…».

Как это исправить:

  • Убедитесь, что Ваш сервер доступен по порту 80 (даже если Ваш сайт обычно перенаправляется на HTTPS).
  • Дважды проверьте путь к webroot в конфигурации Вашего клиента ACME. Файлы вызовов должны быть записаны в: /.well-known/acme-challenge/.
  • Если Ваш сервер использует HTTPS-перенаправления, временно разрешите обычные HTTP-запросы для этого пути.
  • Отключите CDN, обратные прокси-серверы или брандмауэры, которые могут помешать внешней HTTP-проверке от ЦС.
  • Проверьте права доступа к файлам и убедитесь, что файл вызова действительно создается и общедоступен.

Токен не найден или файл недоступен (404 или 403)

Сервер ACME попытался получить файл вызова HTTP, но получил ответ 404 (Not Found) или 403 (Forbidden). Это означает, что файл либо размещен неправильно, либо не находится в открытом доступе, либо Ваш веб-сервер блокирует доступ.

Точные сообщения об ошибках могут отличаться. Вот что Вы можете ожидать увидеть:

  • Неверный ответ с сайта http://yourdomain.com/.well-known/acme-challenge/… [404]
  • Неверный ответ… [403 Forbidden].
  • urn:ietf:params:acme:error:unauthorized

Как это исправить:

Проверьте корень документа для домена и убедитесь, что он совпадает с местом, куда клиент ACME помещает файл: /.well-known/acme-challenge/

Убедитесь, что файл с маркером существует и доступен из браузера. Вы должны иметь возможность открыть URL-адрес вызова непосредственно в браузере и увидеть содержимое токена.

Установите правильные права доступа к файлам: файл вызова ACME и его родительские папки должны быть доступны для чтения всем пользователям.

Если Вы используете правила .htaccess, брандмауэры или плагины безопасности (как в WordPress), убедитесь, что они не блокируют доступ к пути /.well-known/.

Если Вы получите 403, также проверьте принадлежность файлов и ограничения SELinux/AppArmor, если они применимы.


CAA Record Forbids Issuance

В Вашем DNS есть запись CAA, которая ограничивает, какие центры сертификации могут выдавать сертификаты для Вашего домена. Если центра сертификации, который Вы пытаетесь использовать, нет в списке, он блокируется по умолчанию. Вы можете увидеть следующее сообщение об ошибке: urn :ietf:params:acme:error:caa

Это политика на уровне DNS, а не проблема сервера. УЦ обязаны проверять CAA перед выдачей любого сертификата.

Как это исправить:

Проверьте зону DNS Вашего домена на наличие записей CAA. Вы можете использовать онлайн-инструменты или команду dig:

dig CAA yourdomain.com

Если нет записи CAA, то любой ЦС может выдать сертификат. Но если она есть, убедитесь, что в ней указано точное имя Вашего поставщика сертификатов, например:

  • 0 выпуск «sectigo.com»
  • 0 выпуск «digicert.com»

Если Вы используете сертификат с подстановочным знаком, также добавьте строку issuewild: 0 issuewild «sectigo.com».

Подождите несколько минут, пока DNS не распространится, а затем повторите заказ ACME. Если Вы не уверены, временно удалите запись CAA для проверки выдачи, но только если Вы управляете DNS безопасно.


TXT-запись не найдена (для сертификатов Wildcard)

Сертификаты Wildcard (например, *.example.com) требуют проверки DNS-01 — единственного метода, разрешенного всеми ЦС для доменов wildcard.

DNS-01 работает, предлагая Вам создать специальную TXT-запись в DNS: _acme-challenge.example.com

Если эта запись отсутствует или еще не распространилась, Вы получите эту ошибку.

Примеры ошибок:

  • urn:ietf:params:acme:error:dns :: Проблема DNS: NXDOMAIN ищет TXT для _acme-challenge.example.com
  • TXT-запись не найдена для _acme-challenge.example.com

Как это исправить:

В своем DNS-провайдере создайте TXT-запись:

  • Имя: _acme-challenge.example.com
  • Значение: (токен, который дает Вам клиент ACME; уникален для каждого запроса)

Подождите 1-10 минут, пока DNS распространится. Некоторым провайдерам требуется больше времени. Подтвердите это следующей командой.

dig TXT _acme-challenge.example.com

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


Слишком много запросов или превышен лимит тарифов

Ошибка отображается как urn :ietf:params:acme:error:rateLimited или 429 Too Many Requests, когда сервер ACME отказывается обрабатывать Ваш запрос, потому что Вы превысили лимит скорости.

Обычно это происходит, когда Вы запрашиваете слишком много сертификатов для одного и того же домена (доменов) за короткий период времени или отправляете слишком много неудачных запросов подряд.

Как это исправить:

Большинство ограничений скорости автоматически сбрасываются через час, день или неделю, в зависимости от того, что Вы нажимаете. Если Вы используете скрипт, проверьте журналы и исправьте ошибки перед повторной попыткой. Не выполняйте перебор вслепую, это только усугубит блокировку.

При проверке DNS-01 избегайте быстрых повторных запросов после небольших ошибок в TXT-записи. Дождитесь распространения DNS. Если Ваш ЦС предоставляет страницу состояния ограничения скорости или заголовки, проверьте их на предмет более точного времени сброса.


Ошибки DNS или сбои в поиске

Если Вы получаете сообщения типа«DNS problem: NXDOMAIN looking up A for example.com» или«Temporary failure in name resolution«, это означает, что сервер ACME не смог разрешить Ваше доменное имя, либо потому что домен не существует, либо потому что он еще не распространился, либо потому что у него нет действительных IP-записей.

Центр сертификации полагается на DNS, чтобы проверить, что Ваш домен существует и указывает на реальное место. Если он не может связаться с Вашими записями A (IPv4) или AAAA (IPv6), он остановит процесс проверки.

Это может произойти, если:

  • Ваш домен совсем новый, и DNS еще не полностью распространился.
  • Вы забыли добавить нужные записи DNS
  • Вы работаете в локальной или внутренней сети, где нет публичной видимости DNS.
  • В доменном имени, которое Вы отправили, допущена опечатка.

Как это исправить:

  • Дважды проверьте, что в Вашем домене есть действительные записи A или AAAA, указывающие на Ваш живой сервер.
  • Для подтверждения распространения используйте такие инструменты, как dig, nslookup или онлайновые программы проверки (например, whatsmydns.net) .
  • Убедитесь, что Вы не используете частный или только внутренний домен. Проверка ACME работает только для публично разрешаемых имен.
  • Подождите несколько минут после изменений DNS; они не всегда происходят мгновенно.

Не удалось подключиться к серверу ACME

Эта ошибка появляется, когда Ваш сервер не может достичь конечной точки ACME API. В зависимости от клиента ACME она может отображаться как Connection refused, Timeout during connect, Could not connect или аналогичные сообщения.

Как это исправить:

  • Убедитесь, что Ваш сервер разрешает исходящие HTTPS-соединения через порт 443.
  • Проверьте настройки брандмауэра или правила исходящей сети (особенно в облачных/VPS-установках).
  • Если Вы используете прокси-сервер, разрешите трафик к домену сервера ACME ЦС.
  • Убедитесь, что на Вашем сервере работает DNS-резольвер.
  • Проверьте возможность подключения с помощью: curl https://acme.example.com (замените реальную конечную точку Вашего ЦС).
  • Перезапустите клиент ACME после устранения проблем с сетью.

Послеобновляющий сценарий не сработал

Эта ошибка появляется после успешного обновления сертификата, когда последующий скрипт, предназначенный для перезагрузки Вашего веб-сервера или службы, не был запущен должным образом. В зависимости от Вашего клиента ACME, Вы можете увидеть такие сообщения, как «post-hook error», «deploy script failed» или «command not found».

Как это исправить:

  • Запустите свой скрипт после обновления вручную, чтобы посмотреть, что сломалось.
  • Проверьте пути к файлам, особенно для новых сертификатов и ключей.
  • Убедитесь, что скрипт имеет права на выполнение (например, chmod +x script.sh).
  • Ищите опечатки, отсутствующие зависимости или неправильный синтаксис команд.
  • Если Вы используете deploy hook или post-hook, убедитесь, что клиент поддерживает их и что они настроены правильно.

Заключительные слова

Мы рассмотрели наиболее распространенные ошибки SSL-сертификата ACMS и дали быстрые способы их устранения. Если ни один из этих способов не помог Вам решить проблему, запустите клиент ACME в режиме отладки. Большинство клиентов выдают более подробные результаты, если Вы включите ведение журнала. Эта информация может помочь выявить истинную причину и заставить Ваш SSL снова работать.

Сэкономьте 10% на SSL-сертификатах при заказе сегодня!

Быстрая выдача, надежное шифрование, 99,99% доверия к браузеру, специализированная поддержка и 25-дневная гарантия возврата денег. Код купона: SAVE10

Детальное изображение дракона в полете
Написано

Опытный автор контента, специализирующийся на SSL-сертификатах. Превращает сложные темы кибербезопасности в понятный, увлекательный контент. Вносите свой вклад в повышение уровня цифровой безопасности с помощью впечатляющих рассказов.