Skip to content

Nginx

За этой категорией можно следить из открытой социальной сети, используя идентификатор nginx@baseinfo.nbics.net

1 Темы 1 Сообщения
  • Самоподписанный сертификат для Nginx

    1
    0 Голоса
    1 Сообщения
    9 Просмотры
    A
    Подробная инструкция по добавлению универсального самоподписанного сертификата в 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-блоке. Откройте или создайте конфиг-файл (например, /etc/nginx/conf.d/ssl.conf для глобальной настройки или в /etc/nginx/sites-available/default для конкретного сайта). Добавьте следующие строки вне 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.