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. Nginx
  3. Самоподписанный сертификат для Nginx

Самоподписанный сертификат для Nginx

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

    Подробная инструкция по добавлению универсального самоподписанного сертификата в Nginx

    Самоподписанный (self-signed) сертификат — это простой и эффективный способ обеспечить HTTPS-соединение для вашего сервера Nginx, особенно в случаях, когда вы работаете без доменного имени (например, по IP-адресу), для внутренних сетей, тестирования или личного использования. Он не требует внешних удостоверяющих центров (CA), но браузеры покажут предупреждение о небезопасности, поскольку сертификат не проверен доверенным CA. Шифрование при этом работает полноценно.

    Эта инструкция основана на стандартных практиках и подходит для большинства дистрибутивов Linux (например, Ubuntu/Debian, CentOS). Предполагается, что Nginx уже установлен и работает. Все команды выполняются с правами root (используйте sudo).

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

    • Nginx установлен и настроен (проверьте: nginx -v).
    • Доступ к серверу по SSH или консоли.
    • Если у вас несколько серверов или контейнеров (например, с Webmin), сертификат Nginx будет независим от их собственных сертификатов. Nginx будет обрабатывать SSL на внешнем уровне, а внутренний трафик может идти по HTTP.
    • Для доступа по IP: укажите внешний IP в поле Common Name (CN) при генерации, чтобы минимизировать предупреждения в браузере.
    • Если у вас домен, рассмотрите бесплатный сертификат от Let's Encrypt вместо self-signed (но это выходит за рамки инструкции).

    Шаг 1: Создание директории для сертификатов

    Создайте защищенную директорию для хранения сертификата и ключа. Это стандартное место для Nginx.

    sudo mkdir -p /etc/nginx/ssl
    sudo chmod 700 /etc/nginx/ssl
    
    • mkdir -p: создает директорию, если она не существует.
    • chmod 700: обеспечивает доступ только владельцу (root), для безопасности.

    Шаг 2: Генерация самоподписанного сертификата

    Используйте утилиту openssl (обычно предустановлена; проверьте: openssl version). Это создаст ключ и сертификат в одном шаге.

    sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
        -keyout /etc/nginx/ssl/selfsigned.key \
        -out /etc/nginx/ssl/selfsigned.crt
    
    • Параметры объяснения:
      • req -x509: создает самоподписанный сертификат.
      • -nodes: не шифрует ключ паролем (упрощает использование в Nginx).
      • -days 3650: срок действия 10 лет (можно изменить, например, на 365 для 1 года).
      • -newkey rsa:2048: генерирует новый RSA-ключ длиной 2048 бит (рекомендуемая длина для безопасности).
      • -keyout: путь к приватному ключу.
      • -out: путь к сертификату.

    Во время выполнения вас спросят интерактивные вопросы (Subject fields):

    • Country Name (2 letter code): Например, RU (можно пропустить, нажав Enter).
    • State or Province Name: Например, Moscow.
    • Locality Name: Например, Moscow.
    • Organization Name: Например, My Company.
    • Organizational Unit Name: Например, IT.
    • Common Name (CN): Важно! Укажите ваш внешний IP-адрес (например, 203.0.113.50) или домен, если есть. Это должно совпадать с адресом, по которому доступен сервер, чтобы браузер не выдавал дополнительное предупреждение о несоответствии.
    • Email Address: Опционально.

    Если нужно сгенерировать сертификат без вопросов (для автоматизации), добавьте -subj "/CN=your.ip.address".

    Шаг 3: Установка прав доступа

    Приватный ключ должен быть защищен, чтобы избежать утечек.

    sudo chmod 600 /etc/nginx/ssl/selfsigned.key
    
    • chmod 600: только владелец (root) может читать/писать.

    Шаг 4: Настройка конфигурации Nginx

    Добавьте ссылки на сертификат в конфигурационный файл Nginx. Это можно сделать глобально (для всех серверов) или в конкретном server-блоке.

    1. Откройте или создайте конфиг-файл (например, /etc/nginx/conf.d/ssl.conf для глобальной настройки или в /etc/nginx/sites-available/default для конкретного сайта).

    2. Добавьте следующие строки вне server-блоков (для глобального использования) или внутри server-блока:

    ssl_certificate /etc/nginx/ssl/selfsigned.crt;
    ssl_certificate_key /etc/nginx/ssl/selfsigned.key;
    
    • Если сертификат для нескольких портов или серверов: используйте один сертификат для всех (универсальный подход).
    • В server-блоке добавьте listen с SSL:
    server {
        listen 443 ssl;  # Или ваш порт, например 8443 ssl;
        server_name your.ip.address;  # Или _ для wildcard
    
        # Другие настройки, например location / { ... }
    
        ssl_certificate /etc/nginx/ssl/selfsigned.crt;
        ssl_certificate_key /etc/nginx/ssl/selfsigned.key;
    }
    
    • Если вы проксируете трафик (например, на контейнеры с Webmin): используйте proxy_pass http://internal-ip:port; внутри location. SSL терминируется на Nginx, внутренний трафик — HTTP (безопасно в локальной сети).

    Важно: Создайте сертификат до добавления этих строк, иначе Nginx выдаст ошибку при проверке.

    Шаг 5: Проверка и перезагрузка Nginx

    Проверьте конфигурацию на ошибки:

    sudo nginx -t
    
    • Если ошибка "cannot load certificate": проверьте пути к файлам или создайте сертификат заново.

    Перезагрузите Nginx:

    sudo systemctl reload nginx
    
    • Или sudo nginx -s reload (если не используете systemd).

    Шаг 6: Тестирование в браузере

    • Откройте https://your.ip.address:port (например, https://203.0.113.50:8443).
    • Браузер покажет предупреждение: "Соединение не защищено" (NET::ERR_CERT_AUTHORITY_INVALID).
      • Нажмите "Дополнительно" > "Перейти на сайт" (или аналог в вашем браузере).
      • Для постоянного доступа: добавьте исключение в настройках браузера (в Chrome: Settings > Privacy and security > Manage certificates > Import ваш .crt файл).
    • Если доступ по домену: предупреждение будет слабее, если CN совпадает.
    • Проверьте SSL: используйте curl -v https://your.ip.address:port или онлайн-инструменты вроде SSL Labs (но для self-signed тест покажет A-рейтинг с предупреждением о доверии).

    Возможные проблемы и решения

    • Конфликт с другими сертификатами: Не возникает, если они в разных сервисах (например, Webmin использует свой miniserv.pem). Nginx обрабатывает свой сертификат независимо.
    • Предупреждение в браузере не уходит: Нормально для self-signed. Для полного устранения — получите доверенный сертификат (Let's Encrypt для доменов; для IP — ограниченная поддержка с коротким сроком).
    • Nginx не стартует: Проверьте логи (sudo journalctl -u nginx или /var/log/nginx/error.log). Ошибки часто в путях или правах.
    • Доступ по нескольким портам: Один сертификат работает для всех listen с ssl.
    • Обновление сертификата: Когда истечет срок, повторите Шаг 2–5.
    • Безопасность: Self-signed подходит для внутренних/личных сценариев. Для публичного доступа используйте Let's Encrypt.

    Эта инструкция делает настройку универсальной: один сертификат для всего Nginx.

    1 ответ Последний ответ
    0
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    • Сначала старые
    • Сначала новые
    • По количеству голосов


    • Войти

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