Certbot за прокси-сервером: Полное руководство по настройке SSL-сертификатов

Введение в Certbot и прокси-серверы

Certbot – автоматизированный инструмент для получения и обновления бесплатных SSL/TLS-сертификатов от Let’s Encrypt. При работе через прокси-сервер (Nginx, HAProxy, Apache Reverse Proxy) возникают уникальные сложности, связанные с пробросом портов и верификацией домена. В этом руководстве вы узнаете, как корректно настроить Certbot в инфраструктуре с прокси, обеспечив безопасное HTTPS-соединение без простоев.

Почему прокси создает проблемы для Certbot

Стандартный метод Certbot (standalone) использует порты 80 и 443 для проверки домена. Прокси-серверы блокируют эти порты, вызывая ошибки верификации. Основные сложности:

  • Конфликт портов между прокси и Certbot
  • Невозможность прямой валидации через HTTP-01 challenge
  • Динамические IP в облачных средах
  • Ограничения безопасности в Docker-контейнерах

4 рабочих метода настройки Certbot за прокси

1. Webroot Plugin + Проброс статики

Самый надежный способ. Certbot размещает валидационные файлы в директории, доступной прокси:

  1. Создайте каталог: mkdir -p /var/www/letsencrypt
  2. Настройте прокси на обслуживание пути /.well-known/acme-challenge
  3. Запустите: certbot certonly --webroot -w /var/www/letsencrypt -d example.com

2. DNS-валидация (DNS-01)

Идеально для закрытых инфраструктур. Требует поддержки DNS-провайдера:

  • Поддерживается Cloudflare, Route53, DigitalOcean
  • Команда: certbot certonly --dns-cloudflare -d *.example.com
  • Не требует открытия портов

3. Проброс портов в Nginx

Временное перенаправление трафика:

location ^~ /.well-known/acme-challenge {
    proxy_pass http://localhost:9080;
}

Запуск Certbot: certbot certonly --standalone --http-01-port 9080

4. Docker-контейнеры с общими томами

Для Docker Swarm/Kubernetes:

  1. Смонтируйте директорию сертификатов в контейнеры
  2. Используйте certbot-dns-плагины
  3. Автообновление через cron в sidecar-контейнере

Пошаговая настройка для Nginx Reverse Proxy

  1. Установите Certbot: sudo apt install certbot python3-certbot-nginx
  2. Настройте базовый конфиг Nginx с блоком location для верификации:
    server {
        listen 80;
        server_name example.com;
        location ^~ /.well-known/acme-challenge/ {
            root /var/www/letsencrypt;
        }
    }
  3. Получите сертификат: sudo certbot certonly --webroot -w /var/www/letsencrypt -d example.com
  4. Добавьте SSL-конфигурацию в виртуальный хост

Интеграция с HAProxy

Схема работы:

  1. На отдельном сервере запустите Nginx для обработки ACME-запросов
  2. Перенаправляйте трафик от HAProxy:
    frontend http-in
        acl acme path_beg /.well-known/acme-challenge/
        use_backend acme if acme
    
    backend acme
        server acme-server 192.168.1.10:80
  3. Объедините сертификаты: cat fullchain.pem privkey.pem > haproxy.pem

Автоматизация обновления сертификатов

Ключевые этапы:

  • Добавьте в cron: 0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
  • Для Docker: используйте официальный образ certbot/certbot с volume для certificates
  • Мониторинг через Prometheus и Grafana

Заключение

Настройка Certbot за прокси-сервером требует понимания механизмов ACME-валидации, но решается проверенными методами. Webroot-плагин и DNS-проверки – оптимальные решения для большинства сценариев. Регулярное обновление сертификатов обеспечит непрерывную защиту трафика без ручного вмешательства.

Часто задаваемые вопросы (FAQ)

Как проверить работу Certbot за прокси?

Используйте тестовый режим: certbot certonly --dry-run. Проверьте доступность URL http://domain/.well-known/acme-challenge/test через прокси.

Какие порты нужно открыть для Certbot?

Для HTTP-01: порт 80 (или кастомный порт в webroot-режиме). Для DNS-валидации открытие портов не требуется.

Как обновить сертификаты в Docker Swarm?

Используйте отдельный сервис с расписанием:

services:
  certbot:
    image: certbot/certbot
    volumes:
      - certs:/etc/letsencrypt
    command: renew --webroot --webroot-path=/var/www/certbot

Что делать при ошибке “Connection refused”?

  1. Проверьте проброс портов в конфигурации прокси
  2. Убедитесь, что брандмауэр разрешает входящие подключения
  3. Для standalone-режима остановите веб-сервер перед запуском Certbot

Подходит ли Certbot для enterprise-прокси?

Да, при использовании DNS-валидации или выделенного ACME-сервера. Для критичных систем добавьте резервирование через дублирующие сертификаты.

Proxy Ninja
Добавить комментарий