# Алгоритм получения и продления сертификата Эта страница описывает реальный алгоритм работы скрипта (по документации и текущему коду). ## Получение сертификата (production / staging) Команды: - production: `--obtain` - staging: `--staging` Шаги: 1) Проверка наличия certbot 2) Формирование списка доменов для certbot: - всегда: `` - если `wildcard=true`: `*.` 3) Запуск `certbot certonly --manual --preferred-challenges dns` 4) Certbot вызывает hook'и: - auth-hook: добавляет TXT запись `_acme-challenge` через API reg.ru - cleanup-hook: удаляет TXT запись 5) После успеха сертификаты появляются в `cert_dir//`: - `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 ` и использует те же 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 для бесшовного получения и продления сертификатов.