Как получить сертификат Let’s Encrypt через DNS для другого сервера

Важные замечания

Важные замечания 2

Certbot по умолчанию пытается:

Запуск с sudo дает необходимые права для всех этих операций.

Пошаговая инструкция

Шаг 1. Удалите файл блокировки (если есть)

bash

sudo rm -f /var/log/letsencrypt/.certbot.lock

Шаг 2. Запустите certbot с sudo

bash

sudo certbot certonly --manual --preferred-challenges dns -d example.com -d www.example.com --staging

--staging можно оставить для тестирования (лимиты мягче);

После успешного теста уберите --staging для реального сертификата.

Если хотите выпустить реальный сертификат, сначала удалите тестовый:

bash

sudo certbot delete --cert-name example.com

Подтвердите удаление, когда certbot запросит подтверждение.

Шаг 3. Получите TXT‑записи от certbot

После запуска certbot выведет два значения:

Скопируйте оба значения.

Шаг 4. Добавьте TXT‑записи в DNS

В панели управления DNS создайте две TXT‑записи:

Запись Name/Host Value/Text
Для основного домена _acme-challenge.example.com xxxxxx (из вывода certbot)
Для www‑поддомена _acme-challenge.www.example.com yyyyyy (из вывода certbot)

TTL: 3600 секунд. Сохраните записи.

Шаг 5. Проверьте распространение DNS

Дождитесь, пока записи распространятся:

bash

dig TXT _acme-challenge.example.com +short
dig TXT _acme-challenge.www.example.com +short

Обе команды должны вывести соответствующие значения TXT‑записей. Если нет — подождите 5–10 минут и проверьте снова.

Иногда dig долго показывает старое значение. Тогда проверьте через разные DNS‑серверы. Это поможет определить, проблема локальная или глобальная:

bash

# Через Google DNS
dig TXT _acme-challenge.example.com @8.8.8.8 +short
dig TXT _acme-challenge.www.example.com @8.8.8.8 +short
# Через Cloudflare DNS
dig TXT _acme-challenge.example.com @1.1.1.1 +short
dig TXT _acme-challenge.www.example.com @1.1.1.1 +short

Если на публичных DNS запись есть, а локально — нет, проблема в кэше. Обычно можно игнорировать и сразу продолжить процедуру.

Шаг 6. Завершите выпуск сертификата

После того как dig покажет обе записи, вернитесь в терминал с certbot и нажмите Enter (не Ctrl+C!). certbot проверит валидацию и выдаст сертификат.

Шаг 7. Проверьте результат

Убедитесь, что сертификат создан и содержит оба домена:

bash

openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -text -noout | grep DNS

В выводе должны быть:

Что будет после успешного выпуска

В Let’s Encrypt структура следующая:

Содержимое /etc/letsencrypt/archive/example.com/:

Симлинки в /live/ всегда указывают на последние версии (например, fullchain.pem → ../archive/example.com/fullchain2.pem).

Файл конфигурации /etc/letsencrypt/renewal/example.com.conf — для автоматического продления.

Записи в логах /var/log/letsencrypt/letsencrypt.log — для диагностики.

Важные предупреждения

Проверка после успешного выпуска

1. Проверьте файлы сертификата:

bash

ls -la /etc/letsencrypt/live/example.com/

Должны быть fullchain.pem и privkey.pem.

2. Проверьте содержимое сертификата:

bash

openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -text -noout | grep DNS

Убедитесь, что перечислены оба домена.

3. Проверьте конфигурацию автоматического продления:

bash

certbot certificates

Должен отображаться ваш сертификат с датой истечения. (На самом деле при ручном выпуске через DNS с продлением все непросто - это отдельная история. На этом этапе никакого автоматического продления нет!)

Краткий план действий

Шаг Действие Команда
1 Удалите файл блокировки sudo rm -f /var/log/letsencrypt/.certbot.lock
2 Запустите certbot от лица root sudo certbot certonly --manual --preferred-challenges dns -d example.com -d www.example.com
3 Добавьте TXT‑записи в DNS Панель управления DNS (где куплен домен)
4 Проверьте распространение DNS (в другом сеансе SSH) dig TXT _acme-challenge.example.com +short ...
5 Нажмите Enter в certbot Только после проверки DNS
6 Проверьте сертификат openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -text -noout | grep DNS