Files
Dmitriy Fofanov 491db2d5bf
Синхронизация Wiki / Синхронизация Wiki (push) Successful in 2s
Исправлены опечатки и улучшена читаемость документации
2026-02-25 07:54:18 +03:00

11 KiB
Raw Permalink Blame History

Алгоритм получения и продления сертификата

Эта страница описывает реальный алгоритм работы скрипта (по документации и текущему коду).

Получение сертификата (production / staging)

Команды:

  • production: --obtain
  • staging: --staging

Шаги:

  1. Проверка наличия certbot
  2. Формирование списка доменов для certbot:
    • всегда: <domain>
    • если wildcard=true: *.<domain>
  3. Запуск certbot certonly --manual --preferred-challenges dns
  4. Certbot вызывает hook'и:
    • auth-hook: добавляет TXT запись _acme-challenge через API reg.ru
    • cleanup-hook: удаляет TXT запись
  5. После успеха сертификаты появляются в cert_dir/<domain>/:
    • privkey.pem, cert.pem, chain.pem, fullchain.pem
  6. (опционально) синхронизация в NPM
  7. (опционально) перезагрузка веб-сервиса (nginx/apache)

Про TXT для поддоменов

Если вы выпускаете сертификат для поддомена вида pages.github.example.com, TXT должен создаваться в зоне зарегистрированного домена example.com как:

  • _acme-challenge.pages.github.example.com

Скрипт учитывает это, выбирая зарегистрированный домен по списку доменов в конфиге.

Продление сертификата

Команда:

  • --renew

Скрипт запускает certbot renew для конкретного --cert-name <domain> и использует те же hook'и (auth/cleanup) с корректным --config.

Авто-режим

Команда:

  • --auto

Логика по каждому домену из конфига:

  • если сертификата нет → получить новый
  • если срок меньше renewal_days → продлить
  • иначе → ничего не делать (опционально проверить наличие в NPM)

Возврат кода:

  • 0 — всё успешно
  • 1 — были ошибки

Где смотреть логи

  • Логи скрипта: путь log_file из конфига
  • Логи certbot: обычно /var/log/letsencrypt/letsencrypt.log
  • systemd: journalctl -u letsencrypt-regru -f

Appendix (migrated from: Создание и продление SSL сертификата)

Инструкция по созданию wildcard сертификата *.example.com в Nginx Proxy Manager и настройке автоматического продления SSL


Шаг 1. Подготовка

  • Убедитесь, что Nginx Proxy Manager (NPM) установлен и доступен по адресу http://192.0.2.1:81/
  • У вас есть доступ к DNS записям домена example.com в панели управления reg.ru или у другого регистратора

Шаг 2. Создание Wildcard SSL сертификата в Nginx Proxy Manager

  1. Войдите в админку Nginx Proxy Manager по адресу http://192.0.2.1:81/

  2. Перейдите в раздел SSL Certificates → нажмите кнопку Add SSL Certificate

  3. Выберите пункт Let's Encrypt

  4. Заполните поля:

    • Domain Names:
      Введите *.example.com — для wildcard сертификата
      Также рекомендуется добавить основной домен example.com (через запятую или в новом поле)
    • Email Address:
      Укажите ваш Email для уведомлений от Let's Encrypt (обязательно)
    • HTTP Challenge:
      Оставьте проверку HTTP, если NPM доступен из интернета по порту 80 и 443, или настройте DNS Challenge если поддерживается вашим DNS
  5. Отметьте галочку "Agree to the Let's Encrypt Terms of Service"

  6. Нажмите Save

  • NPM начнёт процесс получения сертификата с проверкой домена.
  • При успешном запросе сертификата вы увидите новый сертификат в списке.

Шаг 3. Настройка автоматического продления

  • Nginx Proxy Manager автоматически заботится о продлении сертификатов Let's Encrypt.
  • Для этого сервер должен быть доступен из интернета по портам 80 и 443, и DNS записи правильно указывать на ваш сервер.
  • NPM периодически (обычно за 30 дней до окончания) запрашивает обновление сертификата.
  • В случае использования DNS Challenge необходимо чтобы в NPM была настроена интеграция с DNS провайдером (если поддерживается).

Шаг 4. Использование wildcard сертификата в Proxy Hosts

  1. Перейдите в Proxy Hosts → Создайте или отредактируйте запись прокси

  2. В поле Domain Names укажите нужный поддомен из example.com, например:
    api.example.com или www.example.com

  3. В разделе SSL выберите ваш wildcard сертификат *.example.com, который вы получили на шаге 2

  4. Включите опции:

    • Use SSL
    • Force SSL
    • HSTS (при необходимости)
  5. Сохраните изменения.


Шаг 5. Проверка

  1. Проверьте, что для всех поддоменов используется единый сертификат
  2. Посетите https://api.example.com или другие поддомены из браузера
  3. Убедитесь, что сертификат валиден, не просрочен и выдан на *.example.com
  4. Проверяйте в разделе SSL Certificates статус продления сертификата

Дополнительно

  • Если Let's Encrypt не может выполнить HTTP Challenge из-за закрытого порта, настройте DNS Challenge (может потребоваться ключ API DNS провайдера)
  • Для безопасности и уведомлений держите Email в актуальном состоянии
  • Проверяйте логи Nginx Proxy Manager для выявления ошибок продления

Итог

Nginx Proxy Manager позволяет легко получать и автоматически обновлять wildcard SSL сертификаты для домена *.example.com с помощью Let's Encrypt.
Главное — правильно настроить DNS записи и обеспечить интернет доступ на HTTP/HTTPS порты.
Далее используйте один глобальный сертификат для всех ваших поддоменов через настройки Proxy Hosts.


Appendix (migrated from docs/Add Let's Encrypt Certificate для провайдера reg.ru.md)

Инструкция по созданию Let's Encrypt сертификата с DNS Challenge для провайдера reg.ru в Nginx Proxy Manager


Предпосылки

  • Доступ к Nginx Proxy Manager (NPM)
  • Доступ к аккаунту reg.ru с правами управления DNS записями
  • API ключ для управления DNS в reg.ru (если есть автоматическая интеграция)
  • Нужно получить сертификат для *.example.com (wildcard сертификат)

Шаг 1. Получение API ключа для reg.ru

  1. Войдите в панель управления reg.ru
  2. Перейдите в раздел управления API (если поддерживается)
  3. Создайте или найдите API ключ с правом редактирования DNS записей
  4. Сохраните API ключ и секрет (Client ID и API Token)

Шаг 2. Настройка Nginx Proxy Manager для использования DNS Challenge reg.ru

  1. В админке NPM перейдите в SSL Certificates → Add SSL Certificate
  2. Выберите Let's Encrypt -> DNS Challenge
  3. В поле Provider выберите reg_ru или custom (если провайдера нет, потребуется писать скрипт)
  4. В поля API впишите необходимые параметры:
    • Client ID
    • API Token
  5. В поле Domain Names укажите:
    *.example.com (для wildcard сертификата)
    и основной домен example.com
  6. Включите остальные опции (Terms of Service, Email)
  7. Нажмите Save для запроса сертификата
  8. NPM автоматически добавит DNS TXT записи для подтверждения владения доменом через API reg.ru

Шаг 3. Проверка и автоматическое продление

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

Если в NPM нет готовой интеграции с reg.ru

  • Используйте внешний скрипт для обновления TXT записей DNS в reg.ru, настраиваемый в NPM через Custom DNS Provider.
  • Нужна настройка curl запросов к API reg.ru для добавления/удаления TXT записей.

Итог

Для wildcard сертификатов Let's Encrypt у reg.ru необходимо использовать DNS Challenge, используя API провайдера для автоматического управления DNS записями.
В Nginx Proxy Manager настройте DNS Challenge с учётом особенностей reg.ru для бесшовного получения и продления сертификатов.