Skip to content
  • Категории
  • Последние
  • Метки
  • Популярные
  • World
  • Пользователи
  • Группы
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • По умолчанию (Darkly)
  • Нет скина
Collapse

База знаний (кластер NBICS)

  1. Главная
  2. Сети - теория
  3. Основы SSL-сертификации

Основы SSL-сертификации

Запланировано Прикреплена Закрыта Перенесена Сети - теория
2 Сообщения 1 Posters 4 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • A Не в сети
    A Не в сети
    Admin
    написал в отредактировано
    #1

    Содержание

    1 ответ Последний ответ
    0
    • A Не в сети
      A Не в сети
      Admin
      написал в отредактировано Admin
      #2

      Взаимодействие Nginx и Certbot для получения и управления SSL-сертификатами


      Certbot — это официальный клиент Let's Encrypt, который автоматизирует получение и установку SSL/TLS-сертификатов. Nginx — популярный веб-сервер, который может работать как реверс-прокси. Их интеграция позволяет легко перейти на HTTPS без ручной настройки.

      1. Введение: Зачем нужен SSL и как Certbot взаимодействует с Nginx

      SSL/TLS-сертификаты обеспечивают шифрование трафика между клиентом (браузером) и сервером, предотвращая перехват данных. Без HTTPS сайт считается небезопасным в браузерах, и поисковики (как Google) понижают его в выдаче.

      • Роль Certbot: Certbot автоматизирует процесс: проверяет владение доменом, запрашивает сертификат у Let's Encrypt и настраивает Nginx. Плагин --nginx специально интегрируется с конфигурацией Nginx, временно модифицируя её для проверки.
      • Преимущества интеграции:
        • Бесплатно и автоматически (сертификаты на 90 дней с автопродлением).
        • Минимальные изменения в конфиге.
        • Поддержка редиректа HTTP → HTTPS.

      Аналогия: Certbot — как мастер-установщик, который проверяет, что домен ваш (через " challenge" — вызов), а затем "вклеивает" замки (сертификаты) в дверь вашего сервера (Nginx).

      Предварительные требования:

      • Установленный Nginx (sudo apt install nginx на Ubuntu).
      • Установленный Certbot (sudo apt install certbot python3-certbot-nginx).
      • Домен с A-записью,指向 на IP сервера.
      • Открытый порт 80 в фаерволе (для проверки).

      2. Минимальная настройка Nginx для Certbot

      Для успешного получения сертификата Nginx должен слушать порт 80 и иметь блок server с правильным server_name. Certbot использует HTTP-01 challenge: он создаёт временный файл на сервере, и Let's Encrypt проверяет его доступность по HTTP.

      Минималистичный конфиг для выпуска сертификата

      Если ваш бэкенд (приложение) ещё не готов, используйте простой конфиг, независимый от прокси. Создайте файл в /etc/nginx/sites-available/my_domain.conf и активируйте симлинк в sites-enabled.

      server {
          listen 80;
          server_name my_domain.tld;  # Замените на ваш домен
      
          location / {
              root /var/www/html;  # Пустая директория для статических файлов
          }
      }
      
      • Почему это работает? Certbot ищет блок с server_name, совпадающим с доменом (-d my_domain.tld). Он временно добавит location /.well-known/acme-challenge/ для проверки, не трогая ваш location /.
      • Проверка конфига:
        • sudo nginx -t (проверить синтаксис).
        • sudo systemctl reload nginx (применить изменения).

      Если у вас уже есть прокси-настройки (для приложения на порту 9090), они тоже подойдут, но убедитесь, что бэкенд запущен, иначе Nginx может не перезагрузиться.

      Пример с прокси (если бэкенд готов):

      server {
          listen 80;
          server_name my_domain.tld;
          keepalive_timeout 60;
      
          location / {
              proxy_pass http://localhost:9090;
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection "upgrade";
              proxy_cache off;
              proxy_buffering off;
              proxy_read_timeout 100s;
              proxy_set_header Host $host;
              proxy_cache_bypass $http_upgrade;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      }
      

      Нюанс: Если бэкенд не работает, Certbot может выдать ошибку при reload. В этом случае используйте минималистичный вариант выше.

      3. Процесс получения сертификата с Certbot --nginx

      Запустите команду:

      sudo certbot --nginx -d my_domain.tld
      

      Что происходит шаг за шагом

      1. Проверка владения (HTTP-01 Challenge):

        • Certbot создаёт секретный файл в /.well-known/acme-challenge/ на вашем сервере.
        • Временно модифицирует конфиг Nginx, добавляя правило для этой локации (выше вашего location /).
        • Сервер Let's Encrypt запрашивает http://my_domain.tld/.well-known/acme-challenge/XYZ.
        • Nginx отдаёт файл, подтверждая владение.
      2. Выпуск сертификата:

        • Если проверка успешна, Certbot получает сертификат и ключи (/etc/letsencrypt/live/my_domain.tld/).
        • Автоматически добавляет в конфиг:
          • listen 443 ssl;
          • Пути к сертификатам: ssl_certificate ...; ssl_certificate_key ...;
          • Опции: include /etc/letsencrypt/options-ssl-nginx.conf; и ssl_dhparam ...;
        • Предлагает настроить редирект с 80 на 443 (рекомендуется для безопасности).
      3. Автоматическое продление:

        • Certbot создаёт таймер (systemd) или crontab для ежедневной проверки.
        • Продление запускается, если осталось <30 дней.

      После успеха Certbot выдаст "Congratulations!". Теперь сайт доступен по HTTPS.

      Возможные проблемы:

      • DNS не пропагировался: Проверьте A-запись.
      • Порт 80 заблокирован: Откройте в UFW (sudo ufw allow 80).
      • Конфликт с бэкендом: Используйте минимальный конфиг.

      4. Редактирование конфига после получения сертификата

      После Certbot вы можете заменить временные настройки на реальные. Сохраните строки, помеченные # managed by Certbot — они нужны для продления.

      Пример итогового конфига с прокси и SSL:

      server {
          listen 80;
          server_name my_domain.tld;
          # Редирект на HTTPS (добавит Certbot, если выбрать)
          return 301 https://$server_name$request_uri;
      }
      
      server {
          listen 443 ssl; # managed by Certbot
          server_name my_domain.tld;
          keepalive_timeout 60;
      
          ssl_certificate /etc/letsencrypt/live/my_domain.tld/fullchain.pem; # managed by Certbot
          ssl_certificate_key /etc/letsencrypt/live/my_domain.tld/privkey.pem; # managed by Certbot
          include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
          ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
      
          location / {
              proxy_pass http://localhost:9090;
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection "upgrade";
              proxy_cache off;
              proxy_buffering off;
              proxy_read_timeout 100s;
              proxy_set_header Host $host;
              proxy_cache_bypass $http_upgrade;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      }
      
      • Проверьте: sudo nginx -t и sudo systemctl reload nginx.
      • Совет: Разделите HTTP (редирект) и HTTPS в отдельные блоки для ясности.

      5. Продление сертификата: Как Certbot работает с кастомным конфигом

      Certbot не повредит ваш конфиг при продлении (через 90 дней). Он:

      • Временно добавляет правило для challenge.
      • Проверяет синтаксис (nginx -t).
      • Обновляет сертификаты и reload Nginx.
      • Убирает временные изменения.

      Ваши прокси-настройки остаются нетронутыми, если нет ошибок синтаксиса.

      Тестирование продления

      Запустите симуляцию:

      sudo certbot renew --dry-run
      

      Если "all simulated renewals succeeded" — всё в порядке.

      Автоматизация: Certbot сам настраивает таймер. Проверьте: sudo systemctl list-timers.

      6. Лучшие практики и распространённые ошибки

      • Структура конфига: Держите SSL-строки от Certbot нетронутыми. Используйте отдельные файлы для сайтов (/etc/nginx/sites-available/).
      • Безопасность: Включите HSTS (add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;) после настройки.
      • Мониторинг: Установите уведомления о продлении (опция Certbot --post-hook для скриптов).
      • Ошибки:
        • "No matching server block": Убедитесь в правильном server_name.
        • Ошибка reload: Запустите бэкенд или используйте статический root.
        • Многодоменные сертификаты: Добавьте -d домен2.tld.
      • Альтернативы: Для продвинутых — Certbot в standalone режиме (без Nginx), но --nginx удобнее.
      1 ответ Последний ответ
      0
      Ответить
      • Ответить, создав новую тему
      Авторизуйтесь, чтобы ответить
      • Сначала старые
      • Сначала новые
      • По количеству голосов


      • Войти

      • Login or register to search.
      Powered by NodeBB Contributors
      • Первое сообщение
        Последнее сообщение
      0
      • Категории
      • Последние
      • Метки
      • Популярные
      • World
      • Пользователи
      • Группы