Безопасность серверов

Let’s Encrypt на Linux: выпуск, установка и автопродление

Как выпустить сертификат Let’s Encrypt через Certbot, подключить его к Nginx или Apache и проверить продление без ложной уверенности.

17 минут
абстрактная иллюстрация защищённого TLS-соединения сервера
Let’s Encrypt выдаёт публичный сертификат TLS через ACME, когда клиент подтверждает контроль над доменом. Certbot создаёт ключевую пару и запрос, получает сертификат и при поддерживаемом плагине может изменить конфигурацию Nginx или Apache. После выпуска нужно проверить механизм запуска renew, выполнить certbot renew --dry-run и убедиться, что веб-сервер безопасно применит обновлённые файлы.

Когда инструкция применима

Инструкция рассчитана на публичный веб-сервис Linux с доменным именем, которым вы управляете. Нужные права зависят от выбранного способа проверки: для HTTP-01 требуется возможность разместить challenge-файл, освободить порт 80 либо разрешить плагину изменить конфигурацию веб-сервера; для DNS-01 — изменить TXT-запись вручную или через API DNS-провайдера. Certbot запускайте с привилегиями, необходимыми выбранному способу установки и доступу к его каталогам.

  • Для HTTP-01 все опубликованные A- и AAAA-записи имени ведут к точкам, которые корректно обслуживают проверку. Не оставляйте ошибочную AAAA-запись при рабочей A-записи.
  • Для DNS-01 вы контролируете DNS-зону либо можете поручить изменение TXT-записей DNS-плагину Certbot через API DNS-провайдера.
  • Для HTTP-01 доступен входящий HTTP на TCP-порту 80; при standalone этот порт должен быть свободен в момент проверки.
  • При webroot или плагине веб-сервер и обратный прокси не подменяют путь /.well-known/acme-challenge/ страницей приложения, авторизацией или другим ответом.
  • Время сервера синхронизировано, а у Certbot есть исходящий доступ к инфраструктуре центра сертификации.

Не проверяйте HTTP-01 только из локальной сети

Файл может открываться с сервера или из корпоративной сети, но быть недоступным проверяющим узлам Let’s Encrypt из интернета. Настройка портов и диагностика сетевой связности рассматриваются отдельно: Firewall сервера: default deny, порядок правил и политика доступа, UFW и firewalld: настройка firewall в Ubuntu и RHEL.

Выберите HTTP-01 или DNS-01

Проверка владения доменом — обязательная часть выпуска: сертификат не выдают только на основании заявки. Для обычного сайта обычно подходит HTTP-01. Для wildcard-сертификата, например *.example.com, необходим DNS-01: HTTP-01 не подтверждает wildcard-имена.

Выбор ACME-проверки

СпособЧто проверяет Let’s EncryptКогда выбиратьОграничения
HTTP-01Ресурс http://<домен>/.well-known/acme-challenge/<токен>Обычный сайт с доступным HTTP-входомПроверка выполняется через TCP-порт 80; wildcard не поддерживается
DNS-01TXT-запись _acme-challenge.<домен>Wildcard, сервис без публичного HTTP или централизованное DNS-управлениеНужно менять DNS; автоматизация зависит от API провайдера и плагина

При HTTP-01 Let’s Encrypt запрашивает файл только по HTTP на порту 80. Перенаправления поддерживаются только на HTTP или HTTPS и на порты 80 либо 443; поэтому нельзя заменять проверку произвольным HTTPS-портом. Веб-сервер должен отдать именно созданный Certbot ресурс по пути /.well-known/acme-challenge/, а не страницу приложения, ошибку авторизации или другой редирект.

Для DNS-01 центр сертификации ищет TXT-запись в _acme-challenge. Для wildcard-заявки это единственный допустимый тип проверки по правилам Let’s Encrypt. Если сертификат содержит и example.com, и *.example.com, проверка нужна для каждого заявленного идентификатора; Certbot и DNS-плагин покажут требуемые записи или создадут их через API.

Проверьте DNS и HTTP до выпуска

Подставьте своё имя вместо example.com. Эти проверки не изменяют конфигурацию.

  1. 1
    Проверьте адресную запись
    Запросите публичную DNS-запись. В ответе должен быть ожидаемый публичный IP-адрес точки публикации. Если адрес другой или ответа нет, исправьте DNS и дождитесь распространения изменений.
  2. 2
    Проверьте путь HTTP-01
    Для webroot создайте временный файл в каталоге, который реально обслуживает виртуальный хост, и запросите его по полному публичному URL. Ожидается HTTP-ответ с содержимым файла. Если возвращается 404, 403, страница приложения или другой сайт, исправьте mapping виртуального хоста до запуска Certbot.
  3. 3
    Проверьте DNS-01 при ручном сценарии
    После публикации TXT-записи запросите её у публичного резолвера. Значение должно совпасть с тем, которое выдал Certbot. Если его нет, не продолжайте: дождитесь распространения DNS или проверьте делегирование зоны.
Показывает IPv4- и IPv6-записи домена. Сверьте ответ с фактической точкой публикации.
dig +short A example.com
dig +short AAAA example.com
Проверяет типичный webroot-сценарий. Команда создаёт временный файл; в ответе ожидаются статус `200` и строка `acme-preflight`. Удалите файл после проверки.
sudo mkdir -p /var/www/example/.well-known/acme-challenge
printf 'acme-preflight\n' | sudo tee /var/www/example/.well-known/acme-challenge/check.txt
curl -i http://example.com/.well-known/acme-challenge/check.txt
Показывает TXT-запись для DNS-01. Выполняйте после того, как Certbot сообщил значение записи.
dig +short TXT _acme-challenge.example.com

Установите Certbot и выберите интеграцию

Способ установки, названия пакетов и плагинов, расположение файлов и механизм расписания зависят от дистрибутива, источника установки и версии Certbot. В официальном мастере Certbot Instructions выберите свою ОС, Nginx, Apache либо вариант без автоматической интеграции и выполните предложенный для этой комбинации способ установки; также учитывайте документацию дистрибутива. После установки проверьте, что запускается именно ожидаемый клиент.

Показывает установленную версию Certbot. Если команда не найдена, завершите установку способом, рекомендованным для вашего дистрибутива.
certbot --version

Способы выпуска и установки

Вариант CertbotКогда использоватьЧто изменяет
Плагин NginxNginx установлен локально, конфигурация доступна Certbot и подходит для автоматического измененияМожет получить сертификат и предложить установить TLS-настройки в конфигурацию Nginx
Плагин ApacheApache HTTP Server установлен локально и его конфигурация доступна CertbotМожет получить сертификат и предложить установить TLS-настройки в Apache
webrootВеб-сервер уже обслуживает сайт, но конфигурацию менять автоматически не нужно или нельзяКладёт временный challenge-файл в указанный webroot; TLS-конфигурацию вы меняете сами
standaloneНет работающего веб-сервера либо его можно кратковременно остановить, а порт 80 свободенCertbot временно запускает собственный HTTP-сервер для проверки
DNS-плагинНужен wildcard или HTTP недоступен, а DNS-провайдер имеет поддерживаемый APIСоздаёт и удаляет TXT-записи через API при корректно настроенных реквизитах

Сначала отладьте сценарий в staging

Для первичной проверки можно использовать параметр --staging: он направляет запросы в тестовую среду Let’s Encrypt и не расходует производственные лимиты. Полученный сертификат не будет доверенным в браузерах, поэтому не оставляйте его в рабочей конфигурации сайта. У staging также есть собственные ограничения. Актуальные значения и исключения смотрите на официальной странице Let’s Encrypt Rate Limits.

Обычное имя: выпуск через HTTP-01

Выберите один из следующих сценариев. Не запускайте несколько способов одновременно для одного и того же выпуска: это усложняет диагностику и может привести к ненужным проверкам.

Выпустите сертификат для example.com

Примеры запрашивают сертификат для example.com и www.example.com. Уберите имя, если оно не должно быть в сертификате.

  1. 1
    Используйте плагин веб-сервера, если готовы дать ему изменить конфигурацию
    Для Nginx используйте certbot --nginx, для Apache — certbot --apache с параметрами доменов. Certbot обнаружит подходящие виртуальные хосты, выполнит HTTP-01 и обычно предложит установить сертификат. После выполнения проверьте конфигурацию веб-сервера и открытие сайта по HTTPS.
  2. 2
    Или выполните выпуск через webroot
    Укажите каталог, который обслуживает именно нужный HTTP-виртуальный хост. Certbot положит туда временный challenge-файл и после успешной проверки сохранит сертификат, но не обязан менять TLS-конфигурацию веб-сервера. Далее подключите созданные Certbot файлы вручную.
  3. 3
    Используйте standalone только при свободном порте 80
    Остановите либо временно освободите сервис, который слушает TCP-порт 80, затем запустите Certbot в standalone-режиме. После выпуска верните веб-сервер в работу и настройте его на файлы Certbot. При продлении порт 80 также должен быть доступен Certbot, если в renewal-конфигурации сохранён standalone.
  4. 4
    Безопасно проверьте первоначальный выпуск в staging
    Если production-сертификата ещё нет, сначала проверьте выбранный способ в режиме certonly --staging, чтобы тестовый сертификат не был автоматически установлен в рабочий виртуальный хост. После успешной проверки найдите тестовую линейку через certbot certificates, убедитесь, что сервисы не ссылаются на её файлы, и удалите её через certbot delete. Затем отдельно выполните нужную production-команду без --staging. Для уже существующей production-линейки используйте certbot renew --dry-run, а не заменяйте её staging-сертификатом.
Вариант для установленного Nginx с соответствующим плагином. Команда может изменить конфигурацию Nginx; перед подтверждением прочитайте предложения Certbot.
sudo certbot --nginx -d example.com -d www.example.com
Вариант для Apache HTTP Server с соответствующим плагином. Команда может изменить конфигурацию Apache.
sudo certbot --apache -d example.com -d www.example.com
Выпускает сертификат через webroot и не устанавливает его в конфигурацию веб-сервера. Путь `/var/www/example` замените фактическим document root нужного сайта.
sudo certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com
Временно запускает встроенный HTTP-сервер Certbot. Выполняйте, только если порт 80 свободен и доступен извне.
sudo certbot certonly --standalone -d example.com -d www.example.com

Wildcard-сертификат: выпуск через DNS-01

Для *.example.com используйте DNS-01. В типичной заявке добавляют и базовое имя example.com: wildcard охватывает имена на один уровень ниже, но не само базовое имя. DNS-плагин должен поддерживать API вашего DNS-провайдера; реквизиты API храните в отдельном файле с минимальными правами, достаточными только для нужной DNS-зоны.

Шаблон для установленного DNS-плагина. Замените `<provider>` на имя плагина, указанное в его документации, и добавьте его параметры реквизитов. Оболочка не должна раскрывать wildcard: имя оставлено в одинарных кавычках.
sudo certbot certonly --dns-<provider> -d example.com -d '*.example.com'

Если API-плагина нет, Certbot может показать TXT-запись для ручного создания. Такой выпуск возможен, но автоматическое продление потребует повторного ручного изменения DNS и потому не является автономным. Некоторые DNS-плагины умеют ожидать распространения записи, но интервалы, реквизиты и поведение определяются документацией выбранного плагина и DNS-провайдера.

Ограничьте доступ DNS-реквизитов

Не добавляйте токен DNS API в командную строку, репозиторий, тикет или чат: он может попасть в историю команд и журналы. Выдайте токену минимальные разрешения на нужную зону и защитите файл реквизитов правами доступа. Общие правила учёта и ротации таких данных — в статье Управление секретами сервера: хранение, выдача, ротация и отзыв доступов.

CSR и файлы, созданные Certbot

При стандартном выпуске через Certbot вручную создавать CSR и ключ через OpenSSL обычно не нужно. Certbot создаёт закрытый ключ, формирует CSR и выполняет ACME-процесс сам. Создание произвольного CSR через OpenSSL — отдельная задача; назначение CSR и различия форматов описаны в статье SSL/TLS-сертификаты на сервере: как работают, какие бывают и что выбрать.

В стандартном каталоге Certbot, обычно /etc/letsencrypt/live/<имя-сертификата>/, находятся PEM-файлы. Пути из этого каталога следует использовать в веб-сервере, а не копировать сертификаты в произвольное место: Certbot обновляет их при продлении. Точное имя каталога смотрите в выводе certbot certificates.

Файлы Certbot в каталоге live

ФайлНазначениеТипичное использование
cert.pemТолько конечный сертификат сервераНужен отдельным приложениям, если они сами запрашивают серверный сертификат без цепочки
chain.pemЦепочка сертификатов промежуточных центров без конечного сертификатаИспользуется только там, где программа требует цепочку отдельным файлом
fullchain.pemКонечный сертификат вместе с промежуточной цепочкойОбычный файл сертификата для Nginx, Apache и многих TLS-серверов
privkey.pemЗакрытый ключ, соответствующий сертификатуУказывается как файл ключа и не передаётся клиентам

Для типичной ручной интеграции Nginx указывает fullchain.pem как сертификат и privkey.pem как ключ. В актуальных конфигурациях Apache обычно также используют fullchain.pem как файл сертификата и privkey.pem как файл ключа. Названия директив и допустимость отдельного файла цепочки зависят от веб-сервера и его версии; не добавляйте корневой сертификат в серверную цепочку.

пример фрагмента TLS-конфигурации
# Nginx: пути подставьте из certbot certificates
ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

# Apache HTTP Server: синтаксис и размещение зависят от версии и конфигурации
SSLCertificateFile    /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

Закрытый ключ — секрет

Ограничьте чтение privkey.pem пользователем root и учётной записью, от имени которой веб-серверу действительно нужно прочитать ключ. Не выводите его содержимое, не прикладывайте к заявкам и не храните в репозитории. Если обязательный SELinux или AppArmor блокирует доступ сервиса, исправляйте контекст или профиль, а не отключайте защитный механизм: SELinux на сервере: Enforcing, контексты и устранение отказов.

Подключите файлы и примените конфигурацию

Выполните после успешного выпуска через certonly или если плагин не установил конфигурацию автоматически.

  1. 1
    Возьмите пути из Certbot
    Запустите certbot certificates и найдите строку Certificate Path и Private Key Path для нужного имени. Обычно это fullchain.pem и privkey.pem в каталоге live.
  2. 2
    Укажите сертификат и ключ в нужном виртуальном хосте
    Используйте путь к fullchain.pem для сертификата и к privkey.pem для ключа. Не подменяйте их содержимым cert.pem без цепочки и не указывайте chain.pem вместо серверного сертификата.
  3. 3
    Проверьте конфигурацию до reload
    Для Nginx обычно применяют nginx -t, для Apache — apachectl configtest. Ожидается успешная проверка синтаксиса. При ошибке не выполняйте reload: исправьте путь, права либо конфигурацию.
  4. 4
    Безопасно примените конфигурацию
    Выполните reload штатной командой или механизмом управления службой вашего дистрибутива. Затем проверьте выдаваемый сертификат снаружи на нужном имени. Подробная диагностика цепочки, имени и истечения срока — в статье Ошибки SSL/TLS-сертификатов: expired, chain incomplete, mismatch и verify failed.
Выводит сертификаты, которыми управляет текущая установка Certbot, их имена, домены, срок действия и пути к сертификату и ключу.
sudo certbot certificates
Типичный вариант для Nginx: сначала проверяет конфигурацию, затем выполняет reload только при успехе. Имя службы может отличаться в дистрибутиве.
sudo nginx -t && sudo systemctl reload nginx
Типичный вариант для Debian-подобной системы с Apache. В других дистрибутивах имя службы часто отличается; ориентируйтесь на установленный пакет.
sudo apachectl configtest && sudo systemctl reload apache2

Проверьте автопродление Let’s Encrypt

Сертификаты Let’s Encrypt имеют короткий срок действия. По состоянию на октябрь 2026 года стандартный срок составляет 64 дня, а Let’s Encrypt планирует дальнейшее сокращение, поэтому не закладывайте в мониторинг постоянные 90 дней и сверяйтесь с официальной документацией Let’s Encrypt. certbot renew не выпускает замену при каждом запуске: он проверяет управляемые сертификаты и пытается продлить только те, для которых наступило предусмотренное Certbot окно продления. Для успеха должны сохраниться условия настроенного метода проверки: доступность DNS, порта 80, webroot, виртуального хоста, прав на файлы и DNS API может измениться после выпуска.

Установка Certbot часто добавляет systemd timer или cron-задачу, но конкретные unit-файлы, расписание и даже наличие такого задания зависят от пакета и способа установки. Не считайте автопродление включённым, пока не увидите действующий планировщик и успешный тест.

Подтвердите, что продление сможет работать сейчас

  1. 1
    Найдите механизм планирования
    Проверьте список systemd timers и задания cron. Ожидается запись, запускающая Certbot или certbot renew. Если её нет, настройте поддерживаемый планировщик по документации способа установки Certbot, а не создавайте вторую конкурирующую задачу поверх неизвестной штатной.
  2. 2
    Выполните тест продления
    Команда certbot renew --dry-run использует тестовую среду и проверяет сохранённые методы продления без замены рабочего сертификата. Ожидается успешное завершение по всем обрабатываемым сертификатам. Ошибка проверки домена означает, что реальное продление также может не пройти.
  3. 3
    Проверьте способ применения сертификата
    Посмотрите renewal-конфигурацию нужной линейки и выясните, сохранён ли installer-плагин Nginx или Apache: такой плагин может сам установить обновление и выполнить необходимый reload. Для сертификатов, выпущенных через certonly, настройте постоянный deploy hook — например, исполняемый файл в каталоге renewal-hooks/deploy стандартной установки Certbot — либо добавьте hook в фактическую команду планировщика. Одноразовый параметр --deploy-hook при ручном запуске не сохраняет настройку для timer или cron.
  4. 4
    Контролируйте срок и результаты в мониторинге
    Отслеживайте срок сертификата, ошибки заданий Certbot и неуспешные reload. Успешный dry-run подтверждает состояние на момент теста, но не гарантирует, что будущая смена DNS, firewall, webroot, прав или конфигурации не остановит продление.
Ищет связанные с Certbot systemd timers и unit-файлы. Отсутствие вывода не доказывает отсутствие cron-задачи.
systemctl list-timers --all | grep -i certbot
systemctl list-unit-files | grep -i certbot
Ищет типичные cron-задания Certbot. Расположение пользовательских cron-файлов зависит от дистрибутива и прав доступа.
sudo grep -R "certbot\|certbot renew" /etc/cron* /var/spool/cron 2>/dev/null
Тестирует сохранённые конфигурации продления через staging-среду. Команда не заменяет производственный сертификат.
sudo certbot renew --dry-run
Создаёт постоянный deploy hook для стандартного каталога Certbot. Он проверяет конфигурацию Nginx и выполняет reload только после успешного развёртывания обновлённого сертификата. Используйте пример только для установки, где Certbot поддерживает этот каталог; замените имя службы и команды для своей системы.
sudo install -d -m 0755 /etc/letsencrypt/renewal-hooks/deploy
sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-nginx >/dev/null <<'EOF'
#!/bin/sh
nginx -t && systemctl reload nginx
EOF
sudo chmod 0755 /etc/letsencrypt/renewal-hooks/deploy/reload-nginx

Deploy hook и dry-run

Deploy hook запускается после успешного размещения обновлённого сертификата. При --dry-run Certbot обычно не запускает deploy hooks, чтобы тест не воздействовал на сервис. Если нужно отдельно проверить hook, изучите параметры вашей версии Certbot, включая --run-deploy-hooks, и заранее оцените влияние reload на рабочую нагрузку.

Диагностика lets encrypt renewal failed и acme challenge failed

Проблема

acme challenge failed при HTTP-01

Возможные причины

  • A- или AAAA-запись ведёт не на тот сервер; особенно часто забывают про IPv6.
  • TCP-порт 80 недоступен извне либо занят другим сервисом при standalone.
  • Неверно указан webroot, виртуальный хост обслуживает другой каталог или приложение перехватывает путь.
  • Прокси, CDN, редирект или правило доступа возвращают не challenge-файл.

Решение

Сопоставьте доменные A- и AAAA-записи с реальной точкой публикации, повторите проверку временного файла по HTTP и посмотрите журналы веб-сервера. Для standalone убедитесь, что порт 80 свободен именно в момент запуска. Если сертификат выпускается впервые, отладьте выбранный способ через certonly --staging: не устанавливайте тестовый сертификат в рабочий виртуальный хост, после проверки убедитесь, что сервисы не ссылаются на тестовую линейку, удалите её и отдельно выполните production-выпуск. Для существующей production-линейки используйте certbot renew --dry-run.

Как избежать

После изменений DNS, прокси, webroot или виртуального хоста запускайте `certbot renew --dry-run`.

Проблема

acme challenge failed при DNS-01

Возможные причины

  • TXT-запись создана не в той зоне или с неверным именем `_acme-challenge`.
  • Запись ещё не распространилась по авторитетным DNS-серверам.
  • Токен API не имеет прав на DNS-зону, истёк или используется неверный файл реквизитов.
  • У DNS-плагина нет нужного времени ожидания распространения либо оно недостаточно для провайдера.

Решение

Сверьте точное имя и значение TXT из вывода Certbot через dig, проверьте делегирование зоны и права API-токена. Для автоматизированного сценария используйте параметры ожидания и формат реквизитов из документации конкретного DNS-плагина.

Как избежать

Выдавайте API-токену минимальные права и тестируйте DNS-01 в staging после смены DNS-провайдера, токена или плагина.

Проблема

lets encrypt renewal failed или сертификат не обновился

Возможные причины

  • Планировщик не установлен, отключён или запускает другой экземпляр Certbot.
  • Изменились условия HTTP-01 или DNS-01.
  • У Certbot нет прав записи в свои каталоги либо веб-сервер не может читать ключ.
  • Reload не настроен, не выполнился или конфигурация веб-сервера содержит старые пути.

Решение

Запустите certbot renew --dry-run вручную и прочитайте его вывод. Проверьте состояние timer либо cron, журнал соответствующего unit и журнал Certbot; в типичной установке его ищут в /var/log/letsencrypt/, но путь зависит от установки. Затем проверьте конфигурацию веб-сервера и безопасно выполните reload.

Как избежать

Мониторьте срок действия сертификата извне, код завершения задания Certbot и ошибки reload; не ограничивайтесь наличием timer.

Показывает журнал найденного unit-файла Certbot. Подставьте фактическое имя timer-связанного service unit из вашей системы.
sudo journalctl -u <certbot-unit> --since '7 days ago' --no-pager
Показывает последние записи типичного журнала Certbot. Если файла нет, найдите путь в выводе Certbot или документации способа установки.
sudo tail -n 100 /var/log/letsencrypt/letsencrypt.log

Просмотр, удаление и отзыв сертификата

certbot certificates показывает сертификаты, которыми управляет Certbot, и помогает увидеть имя сертификата для дальнейших операций. Перед любым удалением проверьте, какие виртуальные хосты, приложения и задания продления используют его пути.

Удаляет из Certbot сертификат с указанным именем и связанные с ним управляемые данные. Сначала убедитесь через `certbot certificates`, что выбрано правильное имя.
sudo certbot delete --cert-name example.com

`certbot delete` не отзывает сертификат

certbot delete удаляет локальную запись и файлы, которыми управляет Certbot; он не выполняет отзыв сертификата. Удаление может сломать работающий веб-сервер, если его конфигурация ссылается на fullchain.pem или privkey.pem. После удаления проверьте конфигурацию, работу службы, ссылки на пути Certbot и задания продления.

Отзыв применяют, когда действующему сертификату больше нельзя доверять, например при компрометации закрытого ключа или ошибочном выпуске. Это отдельная операция certbot revoke, требующая осознанно выбрать сертификат и способ подтверждения; перед выполнением сверяйтесь с актуальной документацией Certbot. После отзыва замените сертификат в сервисе и при подозрении на компрометацию проведите ротацию затронутого ключевого материала как инцидент, а не просто удалите локальные файлы.

Термины в статье

ACME — прикладной протокол автоматизации выпуска, продления и отзыва сертификатов, подтверждающий контроль заявителя над доменом или иным идентификатором.
CSR — запрос на выпуск сертификата, содержащий открытый ключ и сведения о субъекте, подписанные соответствующим закрытым ключом для подтверждения владения ключевой парой.
Certbot — ACME-клиент с открытым исходным кодом для запроса, установки и продления TLS-сертификатов; он автоматизирует проверку домена и операции с ключами.
DNS-01 — тип проверки контроля домена в ACME, при котором центр сертификации сверяет TXT-запись _acme-challenge со значением, вычисленным из токена и ключа учётной записи ACME.
HTTP-01 — тип проверки владения доменом в ACME, при котором центр сертификации запрашивает специальный HTTP-ресурс на проверяемом имени.
Let’s Encrypt — публичный центр сертификации, выпускающий сертификаты TLS после автоматизированной проверки контроля над доменным именем по протоколу ACME.
PEM — текстовый формат представления криптографических объектов в Base64 между строками BEGIN/END с меткой типа объекта; он не задаёт алгоритм шифрования или тип ключа.
Wildcard-сертификат — сертификат X.509 для TLS с wildcard-идентификатором DNS в SAN, обычно охватывающим имена с одной меткой перед базовым доменом.
Закрытый ключ — секретная часть асимметричной ключевой пары для создания подписей, расшифрования данных или подтверждения владения ключом при аутентификации.
Отзыв сертификата — прекращение доверия к действующему сертификату до истечения его срока, фиксируемое центром сертификации в CRL или через OCSP.
Проверка владения доменом — процедура подтверждения контроля над DNS-именем, обычно для выпуска сертификата, через DNS-запись, HTTP-файл, электронную почту или иной контрольный метод.
Сертификат TLS — цифровой документ X.509, содержащий открытый ключ и идентификаторы субъекта и подписанный издателем; доверие к связи определяется цепочкой и политикой клиента.
Срок действия сертификата — интервал между полями Not Before и Not After, в пределах которого сертификат может считаться действующим при успешной проверке остальных условий.
Цепочка сертификатов — последовательность от конечного сертификата через сертификаты центров сертификации к точке доверия, позволяющая проверить подписи и построить путь доверия.

Вопросы по теме

Все вопросы и ответы

Почему certbot renew не выпускает новый сертификат при каждом запуске?

Это нормально: certbot renew не выпускает замену при каждом запуске. Он проверяет сертификаты, которыми управляет текущая установка Certbot, и пытается продлить только те, для которых наступило окно продления. Если продление должно выполняться автоматически, должны сохраняться условия исходной проверки: доступность DNS, порта 80, webroot или DNS API и необходимые права на файлы.

Как проверить срок действия сертификата Let’s Encrypt?

Используйте sudo certbot certificates. Команда показывает сертификаты, которыми управляет текущая установка Certbot, включая имена доменов, срок действия, путь к сертификату и путь к закрытому ключу. По этому выводу также можно определить точное имя сертификата и актуальные файлы из каталога Certbot, которые должны быть подключены в веб-сервере.

Можно ли выпустить wildcard-сертификат через HTTP-01?

Нет, для wildcard-имён, например *.example.com, Let’s Encrypt требует DNS-01. HTTP-01 подтверждает доступность ресурса по HTTP на порту 80, но не подходит для wildcard. Для DNS-01 нужно создать TXT-запись _acme-challenge.<домен> вручную либо через DNS-плагин Certbot и API DNS-провайдера.

Нужно ли создавать CSR через OpenSSL для Certbot?

Нет, при стандартном выпуске через Certbot вручную создавать CSR и закрытый ключ через OpenSSL обычно не нужно. Certbot сам создаёт ключевую пару, формирует CSR и проходит ACME-проверку. Отдельное создание произвольного CSR через OpenSSL требуется для другой задачи, а не для обычного получения сертификата Let’s Encrypt через Certbot.

Почему Let’s Encrypt не проходит ACME challenge?

Сначала определите используемый тип проверки. При HTTP-01 Let’s Encrypt запрашивает ресурс только по HTTP на TCP-порту 80. Нельзя заменить эту проверку произвольным HTTPS-портом. Проверьте публичные A- и AAAA-записи: все опубликованные адреса должны вести к точке, корректно обслуживающей challenge. Рабочая IPv4-запись не компенсирует ошибочную AAAA-запись.

Для сценария webroot создайте временный файл в каталоге нужного виртуального хоста и запросите его по полному публичному URL. Ожидаются статус 200 и содержимое файла. Если сервер возвращает 404, 403, страницу приложения, ответ другого сайта или неподходящий редирект, исправьте mapping виртуального хоста или обработку пути /.well-known/acme-challenge/.

При standalone убедитесь, что порт 80 свободен в момент проверки. При DNS-01 запросите TXT-запись _acme-challenge.<домен> у публичного резолвера и сравните её значение с тем, которое сообщил Certbot. Если запись ещё не видна, дождитесь распространения DNS или проверьте делегирование зоны.

Что будет, если у домена неверная AAAA-запись?

HTTP-01 может не пройти, даже если A-запись ведёт на работающий сервер. Let’s Encrypt проверяет все опубликованные A- и AAAA-записи имени, поэтому неверная IPv6-запись может направить проверку на точку, которая не отдаёт challenge-файл. Исправьте или удалите ошибочную AAAA-запись и дождитесь распространения DNS перед выпуском сертификата.