Files
configure_nginx_manager/README.md

16 KiB
Raw Blame History

Руководство по использованию скриптов для управления SSL сертификатами Let's Encrypt с DNS-валидацией через API reg.ru

Содержание

  1. Введение
  2. Требования
  3. Установка зависимостей
  4. Настройка
  5. Использование Bash скрипта
  6. Использование Python скрипта
  7. Автоматизация обновления
  8. Устранение неполадок

Введение

В проекте представлены два скрипта для автоматического создания и обновления SSL сертификатов Let's Encrypt с использованием DNS-валидации через API reg.ru:

  1. letsencrypt_regru_dns.sh - Bash скрипт с использованием плагина certbot-dns-regru
  2. letsencrypt_regru_api.py - Python скрипт с прямым взаимодействием с API reg.ru

Оба скрипта поддерживают:

  • Создание wildcard сертификатов (*.domain.com)
  • Автоматическое обновление сертификатов
  • DNS-валидацию через API reg.ru
  • Логирование всех операций
  • Перезагрузку веб-сервера после обновления

Требования

Общие требования

  • Операционная система: Linux (Ubuntu/Debian/CentOS)
  • Права: root или sudo
  • Домен зарегистрирован на reg.ru
  • Доступ к API reg.ru (имя пользователя и пароль)

Для Bash скрипта

  • certbot
  • certbot-dns-regru (плагин)
  • curl
  • jq
  • openssl

Для Python скрипта

  • Python 3.6+
  • certbot
  • pip3
  • Модули Python: requests, cryptography

Установка зависимостей

Ubuntu/Debian

# Обновление пакетов
sudo apt-get update

# Установка базовых зависимостей
sudo apt-get install -y certbot curl jq openssl python3 python3-pip

# Для Python скрипта
sudo pip3 install certbot-dns-regru requests cryptography

# Для Bash скрипта (если используете)
sudo pip3 install certbot-dns-regru

CentOS/RHEL

# Обновление пакетов
sudo yum update -y

# Установка EPEL репозитория
sudo yum install -y epel-release

# Установка базовых зависимостей
sudo yum install -y certbot curl jq openssl python3 python3-pip

# Установка плагина
sudo pip3 install certbot-dns-regru requests cryptography

Настройка

1. Получение учетных данных API reg.ru

  1. Войдите в личный кабинет на сайте reg.ru
  2. Перейдите в раздел "Управление API"
  3. Используйте ваше имя пользователя и пароль для доступа к API
  4. Убедитесь, что у вас есть права на управление DNS-записями

2. Настройка конфигурации

Для Python скрипта

Создайте файл конфигурации на основе примера:

# Создание примера конфигурации
sudo python3 letsencrypt_regru_api.py --create-config /etc/letsencrypt/regru_config.json

# Редактирование конфигурации
sudo nano /etc/letsencrypt/regru_config.json

Отредактируйте параметры:

{
    "regru_username": "your_actual_username",
    "regru_password": "your_actual_password",
    "domain": "dfv24.com",
    "wildcard": true,
    "email": "admin@dfv24.com",
    "cert_dir": "/etc/letsencrypt/live",
    "log_file": "/var/log/letsencrypt_regru.log",
    "dns_propagation_wait": 60,
    "dns_check_attempts": 10,
    "dns_check_interval": 10
}

Для Bash скрипта

Отредактируйте переменные в начале скрипта:

sudo nano letsencrypt_regru_dns.sh

Измените следующие параметры:

REGRU_USERNAME="your_actual_username"
REGRU_PASSWORD="your_actual_password"
DOMAIN="dfv24.com"
WILDCARD_DOMAIN="*.dfv24.com"
EMAIL="admin@dfv24.com"

3. Установка прав доступа

# Для Bash скрипта
sudo chmod +x letsencrypt_regru_dns.sh

# Для Python скрипта
sudo chmod +x letsencrypt_regru_api.py

# Защита файла конфигурации
sudo chmod 600 /etc/letsencrypt/regru_config.json

Использование Bash скрипта

Первый запуск (получение сертификата)

sudo ./letsencrypt_regru_dns.sh

Скрипт автоматически:

  1. Проверит зависимости
  2. Создаст файл с учетными данными
  3. Установит плагин certbot-dns-regru (если не установлен)
  4. Проверит наличие существующего сертификата
  5. Получит новый сертификат или обновит существующий
  6. Перезагрузит веб-сервер

Просмотр логов

sudo tail -f /var/log/letsencrypt_regru.log

Ручная проверка сертификата

sudo certbot certificates

Использование Python скрипта

Создание примера конфигурации

sudo python3 letsencrypt_regru_api.py --create-config /etc/letsencrypt/regru_config.json

Получение нового сертификата

# С использованием конфигурационного файла
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --obtain

# С подробным выводом
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --obtain -v

Обновление существующего сертификата

sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --renew

Проверка срока действия сертификата

sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --check

Автоматический режим (проверка и обновление)

# Скрипт сам определит, нужно ли обновление
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json

Опции командной строки

-c, --config FILE       Путь к файлу конфигурации (JSON)
--create-config FILE    Создать пример файла конфигурации
--obtain                Получить новый сертификат
--renew                 Обновить существующий сертификат
--check                 Проверить срок действия сертификата
-v, --verbose           Подробный вывод

Автоматизация обновления

Let's Encrypt сертификаты действительны 90 дней. Рекомендуется настроить автоматическое обновление.

Использование cron (для обоих скриптов)

Для Python скрипта

# Открыть crontab
sudo crontab -e

# Добавить задачу (проверка каждый день в 3:00 AM)
0 3 * * * /usr/bin/python3 /path/to/letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json >> /var/log/letsencrypt_cron.log 2>&1

Для Bash скрипта

# Открыть crontab
sudo crontab -e

# Добавить задачу (проверка каждый день в 3:00 AM)
0 3 * * * /path/to/letsencrypt_regru_dns.sh >> /var/log/letsencrypt_cron.log 2>&1

Использование systemd timer

Создайте systemd service и timer для более гибкого управления:

Создание service файла

sudo nano /etc/systemd/system/letsencrypt-regru.service

Содержимое:

[Unit]
Description=Let's Encrypt Certificate Renewal with reg.ru DNS
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /path/to/letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Создание timer файла

sudo nano /etc/systemd/system/letsencrypt-regru.timer

Содержимое:

[Unit]
Description=Daily Let's Encrypt Certificate Check and Renewal
Requires=letsencrypt-regru.service

[Timer]
OnCalendar=daily
Persistent=true
RandomizedDelaySec=1h

[Install]
WantedBy=timers.target

Активация timer

# Перезагрузка systemd
sudo systemctl daemon-reload

# Включение и запуск timer
sudo systemctl enable letsencrypt-regru.timer
sudo systemctl start letsencrypt-regru.timer

# Проверка статуса
sudo systemctl status letsencrypt-regru.timer
sudo systemctl list-timers

Устранение неполадок

Проблема: Ошибка аутентификации API reg.ru

Решение:

  • Проверьте правильность имени пользователя и пароля
  • Убедитесь, что у вашего аккаунта есть доступ к API
  • Проверьте, что домен находится под управлением вашего аккаунта
# Проверка доступа к API
curl -X POST "https://api.reg.ru/api/regru2/user/get_balance" \
  -d "username=YOUR_USERNAME" \
  -d "password=YOUR_PASSWORD" \
  -d "output_format=json"

Проблема: DNS запись не распространяется

Решение:

  • Увеличьте параметр dns_propagation_wait в конфигурации (например, до 120 секунд)
  • Проверьте DNS записи вручную:
nslookup -type=TXT _acme-challenge.dfv24.com
# или
dig TXT _acme-challenge.dfv24.com

Проблема: Certbot не установлен

Решение:

# Ubuntu/Debian
sudo apt-get install certbot

# CentOS/RHEL
sudo yum install certbot

# Или через snap
sudo snap install --classic certbot

Проблема: Плагин certbot-dns-regru не найден

Решение:

# Установка через pip
sudo pip3 install certbot-dns-regru

# Или через pip3 с обновлением
sudo pip3 install --upgrade certbot-dns-regru

Проблема: Недостаточно прав

Решение:

  • Убедитесь, что запускаете скрипт от имени root или с sudo
  • Проверьте права доступа к директории /etc/letsencrypt/
sudo chmod 755 /etc/letsencrypt/
sudo chown -R root:root /etc/letsencrypt/

Проблема: Ошибка при перезагрузке веб-сервера

Решение:

  • Проверьте, какой веб-сервер используется:
systemctl status nginx
systemctl status apache2
  • Вручную перезагрузите веб-сервер:
# Для Nginx
sudo systemctl reload nginx

# Для Apache
sudo systemctl reload apache2

Просмотр подробных логов certbot

# Логи certbot
sudo tail -f /var/log/letsencrypt/letsencrypt.log

# Логи скрипта
sudo tail -f /var/log/letsencrypt_regru.log

Тестовый режим (staging)

Для тестирования используйте staging окружение Let's Encrypt:

# Добавьте опцию --staging к команде certbot
certbot certonly --staging --dns-regru ...

Проверка полученного сертификата

Просмотр информации о сертификате

# Просмотр всех сертификатов
sudo certbot certificates

# Просмотр конкретного сертификата
sudo openssl x509 -in /etc/letsencrypt/live/dfv24.com/cert.pem -text -noout

# Проверка даты истечения
sudo openssl x509 -enddate -noout -in /etc/letsencrypt/live/dfv24.com/cert.pem

Проверка сертификата в браузере

  1. Откройте ваш сайт в браузере: https://dfv24.com
  2. Нажмите на иконку замка в адресной строке
  3. Проверьте информацию о сертификате
  4. Убедитесь, что сертификат выдан Let's Encrypt и покрывает wildcard домен

Онлайн проверка SSL


Использование сертификата в Nginx Proxy Manager

После получения сертификата вы можете использовать его в Nginx Proxy Manager:

Вариант 1: Импорт существующего сертификата

  1. Войдите в Nginx Proxy Manager: http://192.168.10.14:81/
  2. Перейдите в SSL CertificatesAdd SSL Certificate
  3. Выберите Custom
  4. Вставьте содержимое файлов:
    • Certificate Key: /etc/letsencrypt/live/dfv24.com/privkey.pem
    • Certificate: /etc/letsencrypt/live/dfv24.com/fullchain.pem
  5. Сохраните сертификат

Вариант 2: Прямая настройка Nginx

Если вы используете Nginx напрямую, добавьте в конфигурацию:

server {
    listen 443 ssl http2;
    server_name dfv24.com *.dfv24.com;
    
    ssl_certificate /etc/letsencrypt/live/dfv24.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dfv24.com/privkey.pem;
    
    # Дополнительные SSL настройки
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    
    # ... остальная конфигурация
}

Поддержка и вопросы

При возникновении проблем:

  1. Проверьте логи: /var/log/letsencrypt_regru.log
  2. Проверьте логи certbot: /var/log/letsencrypt/letsencrypt.log
  3. Используйте подробный режим: -v для Python скрипта
  4. Проверьте документацию reg.ru API: https://www.reg.ru/support/api
  5. Проверьте документацию Let's Encrypt: https://letsencrypt.org/docs/

Заключение

Оба скрипта предоставляют надежное решение для автоматического управления SSL сертификатами Let's Encrypt с использованием DNS-валидации через API reg.ru.

Рекомендации:

  • Используйте Python скрипт для более гибкой настройки и интеграции
  • Используйте Bash скрипт для простоты и минимальных зависимостей
  • Настройте автоматическое обновление через cron или systemd timer
  • Регулярно проверяйте логи и статус сертификатов
  • Храните учетные данные в безопасности (chmod 600)

Успешной автоматизации! 🔒