Довідник помилок / CAA record prevents certificate issuance
CAA-запис блокує видачу сертифіката
CAA - це DNS-запис, який перелічує центри сертифікації, яким дозволено видавати сертифікати для вашого домену. Коли центр пише «CAA record prevents issuance» або «no valid CAA record found», він прочитав цей запис, не знайшов у ньому себе і зупинився за правилами, а не через поломку на своєму боці. Побачити це можна під час випуску чи продовження сертифіката: у виводі certbot або acme.sh, у логах AutoSSL на хостингу, у панелі перевірки комерційного центру. Самого повідомлення відвідувач не бачить, він пізніше побачить лише прострочений чи відсутній сертифікат.
Перевірте свій сайт
Через що виникає
Найчастіше в домені вже є CAA-запис із чужим центром: його лишив попередній хостинг або старий постачальник сертифікатів, а того центру, яким ви користуєтеся зараз, у списку немає. Друга за частотою причина - неправильне значення: там має стояти точний ідентифікатор із документації центру, наприклад letsencrypt.org, і варіант lestencrypt.org чи https://letsencrypt.org блокує видачу так само надійно, як навмисна заборона. Третя - розбіжність із wildcard: домен дозволяє issue, але має окремий рядок issuewild, і тоді падають саме запити на *.example.com. Рідше запис успадкований: у піддомена свого CAA немає, діє запис з кореня домену, а правлять не те імʼя.
Як виправити
- Запустіть перевірку на цій сторінці для того самого імені, на яке випускається сертифікат, і подивіться рядки CAA. Порожньо - домен взагалі не має CAA, видавати може будь-який центр, і причина відмови інша, тому перечитайте текст помилки. Якщо рядки є, у кожному видно flags (зазвичай 0), тег і значення, і саме з цим списком центр звіряв себе. Якщо ж центр скаржиться, що не вдався сам запит CAA (SERVFAIL), проблема у ваших DNS-серверах або DNSSEC, а не у вмісті запису.
- Якщо на цьому імені CAA немає, перевірте голий домен (example.com, а не www.example.com). CAA читається спочатку на точному імені, а потім вгору до кореня домену, тому запис на корені діє на всі піддомени, які не мають власного.
- Звірте кожне значення issue з ідентифікатором із документації вашого центру: letsencrypt.org для Let's Encrypt, pki.goog для Google Trust Services, sectigo.com, digicert.com тощо. Має бути голий ідентифікатор, без https://, без слеша в кінці і без зайвих пробілів. Рядок iodef - це лише адреса для звітів про порушення, він нічого не блокує, тому його не чіпайте.
- Якщо ви замовляєте wildcard, шукайте саме issuewild. Коли рядок issuewild є, запити на *.example.com оцінюються тільки за ним, а рядки issue для такого запиту ігноруються; коли issuewild немає взагалі, issue поширюється і на wildcard. Значення з однієї крапки з комою (;) означає, що видавати не можна нікому.
- Виправте запис там, де реально живе DNS-зона (реєстратор, панель хостингу або Cloudflare): додайте чи відредагуйте CAA з flags 0, тегом issue і значенням вашого центру, лишивши рядки для інших центрів, якими ви ще користуєтеся. Видалити всі CAA-записи теж коректно, домен повернеться до стану за замовчуванням, коли видавати може будь-який центр.
- Перезапускайте перевірку, доки не побачите нові значення, і лише тоді повторюйте випуск. Кеш DNS означає, що виправлення діє не миттєво: почекайте щонайменше TTL запису і врахуйте, що центр має право повторно використати свіжу перевірку CAA до 8 годин, тому негайна спроба може знову впертися у стару відповідь.