Руководство по использованию скриптов для управления SSL сертификатами Let's Encrypt с DNS-валидацией через API reg.ru
Содержание
- Введение
- Требования
- Установка зависимостей
- Настройка
- Использование Bash скрипта
- Использование Python скрипта
- Автоматизация обновления
- Устранение неполадок
Введение
В проекте представлены два скрипта для автоматического создания и обновления SSL сертификатов Let's Encrypt с использованием DNS-валидации через API reg.ru:
- letsencrypt_regru_dns.sh - Bash скрипт с использованием плагина certbot-dns-regru
- 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
- Войдите в личный кабинет на сайте reg.ru
- Перейдите в раздел "Управление API"
- Используйте ваше имя пользователя и пароль для доступа к API
- Убедитесь, что у вас есть права на управление 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
Скрипт автоматически:
- Проверит зависимости
- Создаст файл с учетными данными
- Установит плагин certbot-dns-regru (если не установлен)
- Проверит наличие существующего сертификата
- Получит новый сертификат или обновит существующий
- Перезагрузит веб-сервер
Просмотр логов
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
Проверка сертификата в браузере
- Откройте ваш сайт в браузере:
https://dfv24.com - Нажмите на иконку замка в адресной строке
- Проверьте информацию о сертификате
- Убедитесь, что сертификат выдан Let's Encrypt и покрывает wildcard домен
Онлайн проверка SSL
Использование сертификата в Nginx Proxy Manager
После получения сертификата вы можете использовать его в Nginx Proxy Manager:
Вариант 1: Импорт существующего сертификата
- Войдите в Nginx Proxy Manager: http://192.168.10.14:81/
- Перейдите в SSL Certificates → Add SSL Certificate
- Выберите Custom
- Вставьте содержимое файлов:
- Certificate Key:
/etc/letsencrypt/live/dfv24.com/privkey.pem - Certificate:
/etc/letsencrypt/live/dfv24.com/fullchain.pem
- Certificate Key:
- Сохраните сертификат
Вариант 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;
# ... остальная конфигурация
}
Поддержка и вопросы
При возникновении проблем:
- Проверьте логи:
/var/log/letsencrypt_regru.log - Проверьте логи certbot:
/var/log/letsencrypt/letsencrypt.log - Используйте подробный режим:
-vдля Python скрипта - Проверьте документацию reg.ru API: https://www.reg.ru/support/api
- Проверьте документацию Let's Encrypt: https://letsencrypt.org/docs/
Заключение
Оба скрипта предоставляют надежное решение для автоматического управления SSL сертификатами Let's Encrypt с использованием DNS-валидации через API reg.ru.
Рекомендации:
- Используйте Python скрипт для более гибкой настройки и интеграции
- Используйте Bash скрипт для простоты и минимальных зависимостей
- Настройте автоматическое обновление через cron или systemd timer
- Регулярно проверяйте логи и статус сертификатов
- Храните учетные данные в безопасности (chmod 600)
Успешной автоматизации! 🔒