Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

cert-manager

Интерактивный скрипт для автоматического получения, управления и обновления SSL-сертификатов Let's Encrypt с поддержкой Cloudflare API и wildcard-сертификатов.

🚀 Возможности

  • Получение SSL-сертификатов через Let's Encrypt
  • Поддержка Cloudflare API для получения wildcard-сертификатов
  • Стандартный ACME-вызов для обычных доменов
  • Автоматическое обновление сертификатов через cron
  • Объединение PEM-файлов для совместимости с HAProxy и другими сервисами
  • Настраиваемые хуки для перезапуска служб после обновления
  • Интерактивное меню для удобного управления
  • Мониторинг статуса сертификатов с отображением срока действия
  • Автоматическое обновление скрипта с GitHub

📋 Требования

Системные требования

  • ОС: Ubuntu 22.04 (протестировано)
  • Права: root или sudo доступ
  • Порт 80: должен быть открыт для ACME-вызовов (при использовании стандартного метода)

Автоматически устанавливаемые зависимости

Скрипт автоматически установит следующие пакеты, если они отсутствуют:

  • certbot - клиент Let's Encrypt
  • python3-certbot-dns-cloudflare - плагин Cloudflare для Certbot
  • ufw - утилита управления файрволом
  • curl - для HTTP-запросов
  • dnsutils - для DNS-запросов (команда dig)
  • cron - планировщик задач

🛠 Установка

Быстрая установка

bash <(curl -Ls https://raw.githubusercontent.com/xxphantom/cert-manager/main/install.sh)

Установка в систему

После первого запуска вы можете установить скрипт в систему:

# В интерактивном меню выберите опцию "9. Установить/обновить этот скрипт"
# Или используйте команду:
sudo ./install.sh install

После установки скрипт будет доступен глобально:

cert-manager

Обновление

Если скрипт уже установлен в системе, при запуске будет предложено его обновить с GitHub:

# Обновление до последней версии
sudo cert-manager
# В меню выберите "9. Обновить этот скрипт"

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

Интерактивный режим

Запустите скрипт без параметров для входа в интерактивное меню:

sudo cert-manager

Командная строка

Скрипт поддерживает следующие команды:

# Показать статус всех сертификатов
sudo cert-manager status

# Получить новый сертификат (интерактивно)
sudo cert-manager get

# Принудительно обновить все сертификаты
sudo cert-manager renew

# Настроить хуки для доменов
sudo cert-manager sethook

# Установить/обновить скрипт в системе
sudo cert-manager install

📖 Подробное описание функций

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

Cloudflare API (рекомендуется)

  • Поддержка wildcard-сертификатов (*.example.com)
  • Не требует открытых портов на сервере
  • Автоматическая DNS-валидация через Cloudflare API
  • ECDSA-ключи с кривой secp384r1 для повышенной безопасности

Требования:

  • Домен должен использовать DNS Cloudflare
  • API-токен Cloudflare с правами на редактирование DNS

Процесс:

  1. Введите основной домен (например, example.com)
  2. Введите email для уведомлений Let's Encrypt
  3. Введите API-токен Cloudflare
  4. Скрипт автоматически получит сертификат для example.com и *.example.com

Стандартный ACME

  • HTTP-01 валидация через порт 80
  • Подходит для отдельных доменов без wildcard
  • Требует доступности порта 80 извне

Требования:

  • Порт 80/tcp должен быть открыт и доступен
  • Домен должен указывать на IP-адрес сервера

2. Автоматическое обновление

Скрипт автоматически настраивает cron-задачу для ежедневной проверки обновлений:

0 4 * * * /usr/bin/certbot renew --quiet

3. Объединение PEM-файлов

Для совместимости с HAProxy, и другими сервисами, скрипт автоматически создает объединенный файл full.pem, содержащий:

  • Приватный ключ (privkey.pem)
  • Полную цепочку сертификатов (fullchain.pem)

Расположение файлов:

/etc/letsencrypt/live/example.com/
├── privkey.pem      # Приватный ключ
├── fullchain.pem    # Полная цепочка сертификатов
└── full.pem         # Объединенный файл (создается автоматически)

4. Настройка хуков

Хуки позволяют автоматически перезапускать службы после обновления сертификатов.

Примеры команд хуков:

# Перезагрузка Nginx
systemctl reload nginx

# Перезапуск Docker-контейнера
docker restart my_container

Автоматический deploy-хук: Скрипт устанавливает специальный deploy-хук в /etc/letsencrypt/renewal-hooks/deploy/01-cert-manager-pem-combiner, который автоматически создает объединенные PEM-файлы при каждом обновлении сертификата.

5. Обновление скрипта

Скрипт поддерживает автоматическое обновление с GitHub:

Процесс обновления:

  1. Скрипт проверяет, установлен ли он в системе
  2. Если установлен, предлагает обновление вместо установки
  3. Скачивает последнюю версию с GitHub
  4. Заменяет текущий файл новой версией
  5. Сохраняет права доступа и настройки

🔧 Конфигурация

Файлы конфигурации

Учетные данные Cloudflare:

/etc/letsencrypt/cloudflare/credentials.ini

Конфигурации обновления доменов:

/etc/letsencrypt/renewal/example.com.conf

Deploy-хук для объединения PEM:

/etc/letsencrypt/renewal-hooks/deploy/01-cert-manager-pem-combiner

📊 Мониторинг и статус

Функция "Показать статус сертификатов" отображает:

  • Список всех доменов с активными сертификатами
  • Пути к файлам сертификатов и ключей
  • Срок действия с цветовой индикацией:
    • 🔴 Красный: менее 14 дней
    • 🟡 Желтый: менее 30 дней
    • 🟢 Зеленый: более 30 дней
  • Настроенные хуки для каждого домена
  • Статус объединенных файлов full.pem

🛡 Безопасность

Права доступа

  • Скрипт требует root-права для работы с системными файлами
  • Файлы с учетными данными Cloudflare имеют права 600 (только root)
  • Все операции с сертификатами выполняются от имени root

Используемые алгоритмы

  • ECDSA-ключи с кривой secp384r1
  • Более безопасные по сравнению с RSA при меньшем размере ключа
  • Поддерживаются всеми современными браузерами и серверами

🔍 Диагностика проблем

Проверка портов

Скрипт автоматически проверяет доступность порта 80 через UFW:

# Открыть порт 80 если необходимо
sudo ufw allow 80/tcp

Проверка DNS

Чтобы не допустить ошибок при получении сертификата, скрипт сравнивает IP сервера с IP домена:

# Проверить IP домена
dig +short A example.com

# Проверить IP сервера
curl -s -4 ifconfig.me

Логи Certbot

# Просмотр логов Certbot
sudo tail -f /var/log/letsencrypt/letsencrypt.log

# Тестовый запуск обновления
sudo certbot renew --dry-run

Проверка cron-задач

# Просмотр cron-задач root
sudo crontab -l

# Проверка работы cron
sudo systemctl status cron

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

Ошибка "Port 80 closed"

# Проверить статус UFW
sudo ufw status

# Открыть порт 80
sudo ufw allow 80/tcp

# Проверить, что порт не занят
sudo netstat -tlnp | grep :80

Ошибка Cloudflare API

  • Проверьте правильность API-токена
  • Убедитесь, что токен имеет права на редактирование DNS
  • Проверьте, что домен использует DNS Cloudflare

Проблемы с обновлением

# Принудительное обновление с подробным выводом
sudo certbot renew --force-renewal --verbose

# Проверка конфигурации обновления
sudo cat /etc/letsencrypt/renewal/example.com.conf

📝 Примеры использования

Получение wildcard-сертификата для Nginx

  1. Запустите скрипт: sudo bash <(curl -fsSL https://raw.githubusercontent.com/xxphantom/cert-manager/main/install.sh) или sudo cert-manager (если уже установлен)
  2. Выберите "2. Получить новый сертификат"
  3. Выберите "1. Cloudflare API"
  4. Введите домен: example.com
  5. Введите email и API-токен Cloudflare
  6. Настройте хук: systemctl reload nginx

Настройка для HAProxy

После получения сертификата используйте объединенный файл:

# В конфигурации HAProxy
bind *:443 ssl crt /etc/letsencrypt/live/example.com/full.pem

Настройка для Docker-контейнера

Настройте хук для перезапуска контейнера:

# В настройках хука
docker restart my_web_container

🤝 Поддержка

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

  1. Проверьте логи: /var/log/letsencrypt/letsencrypt.log
  2. Запустите диагностику: sudo cert-manager status
  3. Проверьте cron-задачи: sudo crontab -l
  4. Выполните тестовое обновление: sudo certbot renew --dry-run

📄 Лицензия

Этот скрипт распространяется свободно для использования и модификации.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages