- Enhanced the Let's Encrypt Workflow documentation with detailed steps for creating and renewing wildcard SSL certificates using Nginx Proxy Manager. - Added troubleshooting tips for API issues with reg.ru, including common errors and their resolutions. - Expanded the Testing documentation to include comprehensive guides on using test certificates, automation scripts, and transitioning to production certificates. - Revised Project Structure documentation to reflect the current organization of files and scripts. - Improved clarity and formatting across all documentation sections for better readability and user guidance.
11 KiB
Алгоритм получения и продления сертификата
Эта страница описывает реальный алгоритм работы скрипта (по документации и текущему коду).
Получение сертификата (production / staging)
Команды:
- production:
--obtain - staging:
--staging
Шаги:
- Проверка наличия certbot
- Формирование списка доменов для certbot:
- всегда:
<domain> - если
wildcard=true:*.<domain>
- всегда:
- Запуск
certbot certonly --manual --preferred-challenges dns - Certbot вызывает hook’и:
- auth-hook: добавляет TXT запись
_acme-challengeчерез API reg.ru - cleanup-hook: удаляет TXT запись
- auth-hook: добавляет TXT запись
- После успеха сертификаты появляются в
cert_dir/<domain>/:privkey.pem,cert.pem,chain.pem,fullchain.pem
- (опционально) синхронизация в NPM
- (опционально) перезагрузка веб-сервиса (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 docs/Создание и продление SSL сертификата.md)
Инструкция по созданию 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
-
Войдите в админку Nginx Proxy Manager по адресу http://192.0.2.1:81/
-
Перейдите в раздел SSL Certificates → нажмите кнопку Add SSL Certificate
-
Выберите пункт Let's Encrypt
-
Заполните поля:
- Domain Names:
Введите*.example.com— для wildcard сертификата
Также рекомендуется добавить основной доменexample.com(через запятую или в новом поле) - Email Address:
Укажите ваш Email для уведомлений от Let's Encrypt (обязательно) - HTTP Challenge:
Оставьте проверку HTTP, если NPM доступен из интернета по порту 80 и 443, или настройте DNS Challenge если поддерживается вашим DNS
- Domain Names:
-
Отметьте галочку "Agree to the Let's Encrypt Terms of Service"
-
Нажмите Save
- NPM начнёт процесс получения сертификата с проверкой домена.
- При успешном запросе сертификата вы увидите новый сертификат в списке.
Шаг 3. Настройка автоматического продления
- Nginx Proxy Manager автоматически заботится о продлении сертификатов Let's Encrypt.
- Для этого сервер должен быть доступен из интернета по портам 80 и 443, и DNS-записи правильно указывать на ваш сервер.
- NPM периодически (обычно за 30 дней до окончания) запрашивает обновление сертификата.
- В случае использования DNS Challenge необходимо чтобы в NPM была настроена интеграция с DNS провайдером (если поддерживается).
Шаг 4. Использование wildcard сертификата в Proxy Hosts
-
Перейдите в Proxy Hosts → Создайте или отредактируйте запись прокси
-
В поле Domain Names укажите нужный поддомен из example.com, например:
api.example.comилиwww.example.com -
В разделе SSL выберите ваш wildcard сертификат
*.example.com, который вы получили на шаге 2 -
Включите опции:
- Use SSL
- Force SSL
- HSTS (при необходимости)
-
Сохраните изменения.
Шаг 5. Проверка
- Проверьте, что для всех поддоменов используется единый сертификат
- Посетите https://api.example.com или другие поддомены из браузера
- Убедитесь, что сертификат валиден, не просрочен и выдан на *.example.com
- Проверяйте в разделе 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
- Войдите в панель управления reg.ru
- Перейдите в раздел управления API (если поддерживается)
- Создайте или найдите API-ключ с правом редактирования DNS записей
- Сохраните API-ключ и секрет (Client ID и API Token)
Шаг 2. Настройка Nginx Proxy Manager для использования DNS Challenge reg.ru
- В админке NPM перейдите в SSL Certificates → Add SSL Certificate
- Выберите Let's Encrypt -> DNS Challenge
- В поле Provider выберите
reg_ruилиcustom(если провайдера нет, потребуется писать скрипт) - В поля API впишите необходимые параметры:
- Client ID
- API Token
- В поле Domain Names укажите:
*.example.com(для wildcard сертификата)
и основной доменexample.com - Включите остальные опции (Terms of Service, Email)
- Нажмите Save для запроса сертификата
- 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 для бесшовного получения и продления сертификатов.