SSL (означает уровень защищенных сокетов) - это веб-протокол, который обеспечивает безопасность трафика между сервером и клиентом путем его шифрования. Сервер и клиенты безопасно передают трафик без риска интерпретации сообщений третьими лицами. Это также помогает клиенту проверить личность веб-сайта, с которым он общается.
В этом посте мы расскажем, как настроить SSL для Nginx. Мы продемонстрируем процедуру с использованием самозаверяющего сертификата. Самозаверяющий сертификат только шифрует соединение, но не проверяет подлинность вашего сервера. Следовательно, его следует использовать только для тестовых сред или для внутренних служб локальной сети. Для производственной среды лучше использовать сертификаты, подписанные CA (центром сертификации).
Предварительные условия
Для этого поста у вас должны быть следующие предварительные условия:
- Nginx уже установлен на вашем компьютере
- Блок сервера настроен для вашего домена
- Пользователь с привилегиями sudo
Описанная здесь процедура была выполнена на Debian 10 (Buster) машина.
Шаг 1. Создание самозаверяющего сертификата
Нашим первым шагом будет создание самозаверяющего сертификата. Выполните следующую команду в Терминале, чтобы сгенерировать CSR (запрос подписи сертификата) и ключ:
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa: 2048 -keyout / etc / ssl / private / selfsigned-nginx.ключ -out / etc / ssl / certs / selfsigned-nginx.crtВам будет предложено предоставить некоторую информацию, такую как название вашей страны, штата, населенного пункта, общее имя (ваше доменное имя или IP-адрес) и адрес электронной почты.
В приведенной выше команде OpenSSL создаст следующие два файла:
- CSR: самоподписанный-nginx.crt в в / etc / ssl / cert / каталог
- Ключ: самоподписанный-nginx.ключ в / etc / ssl / частный каталог
Теперь создайте дхпарам.pem файл используя следующую команду:
$ sudo openssl dhparam -out / etc / ssl / certs / dhparam.pem 2048Шаг 2. Настройка Nginx для использования SSL
На предыдущем шаге мы создали CSR и ключ. Теперь на этом этапе мы настроим Nginx для использования SSL. Для этого мы создадим фрагмент конфигурации и добавим информацию о наших файлах сертификатов SSL и местоположениях ключей.
Выполните следующую команду в Терминале, чтобы создать новый фрагмент конфигурации самоподписанный.conf файл в / и т. д. / nginx / сниппеты.
$ sudo nano / etc / nginx / snippets / самоподписанный.confВ файл добавьте следующие строки:
ssl_certificate / etc / ssl / certs / самоподписанный-nginx.crt;ssl_certificate_key / etc / ssl / private / selfsigned-nginx.ключ;
В ssl_certificate установлен на самоподписанный-nginx.crt (файл сертификата), а ssl_certificate_key установлен на самоподписанный-nginx.ключ (ключевой файл).
Сохраните и закройте самоподписанный.conf файл.
Теперь создадим еще один файл сниппета ssl-params.conf и настройте некоторые базовые параметры SSL. Выполните следующую команду в Терминале, чтобы отредактировать ssl-params.conf файл:
$ sudo nano / etc / nginx / snippets / ssl-params.confДобавьте в файл следующий контент:
ssl_protocols TLSv1.2;ssl_prefer_server_ciphers на;
ssl_dhparam / и т. д. / ssl / certs / dhparam.пем;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512: DHE-RSA-AES256-GCM-SHA512: ECDHE-RSA-AES256-GCM-SHA384: DHE-RSA-AES256-GCM-SHA384: ECDHE4256-SHA-A384: ECDHE4256-SHA-A384
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10 мин;
ssl_session_cache общий: SSL: 10 м;
ssl_session_tickets off;
# ssl_stapling on;
# ssl_stapling_verify on;
резольвер 8.8.8.8 8.8.4.4 действительных = 300 с;
resolver_timeout 5 с;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; режим = блок";
Поскольку мы не используем сертификат, подписанный ЦС, мы отключили сшивание SSL. Если вы используете сертификат, подписанный ЦС, раскомментируйте ssl_stapling Вход.
Шаг 3. Настройка Nginx для использования SSL
Теперь мы откроем файл конфигурации блока сервера Nginx, чтобы внести некоторые изменения. На этом этапе мы предполагаем, что вы уже настроили серверный блок, который будет похож на этот:
serverслушать 80;
слушать [::]: 80;
корень / var / www / test.org / html;
индекс индекс.html-индекс.индекс htm.nginx-debian.html;
server_name test.org www.контрольная работа.org;
место расположения /
try_files $ uri $ uri / = 404;
Чтобы открыть файл конфигурации блока сервера Nginx, используйте следующую команду:
$ sudo nano / etc / nginx / сайты-доступные / тест.orgТеперь измените существующий сервер блок, чтобы он выглядел так:
serverслушайте 443 ssl;
слушайте [::]: 443 ssl;
включать фрагменты / самоподписанные.conf;
включить сниппеты / ssl-params.conf;
корень / var / www / test.org / html;
индекс индекс.html-индекс.индекс htm.nginx-debian.html;
server_name test.org www.контрольная работа.org;
В приведенных выше конфигурациях мы также добавили фрагменты SSL самоподписанный.conf а также ssl-params.conf что мы настроили ранее.
Затем добавьте второй сервер блокировать.
serverслушать 80;
слушать [::]: 80;
server_name test.org www.контрольная работа.org;
return 302 https: // $ server_name $ request_uri;
В приведенной выше конфигурации, возврат 302 перенаправляет HTTP на HTTPS.
Примечание: Обязательно замените test.org с собственным доменным именем. Теперь сохраните и закройте файл.
Шаг 4. Разрешите трафик SSL через брандмауэр
Если в вашей системе включен брандмауэр, вам нужно будет разрешить через него трафик SSL. Nginx предоставляет вам три разных профиля с ufw. Вы можете просмотреть их, используя следующую команду в Терминале:
Список приложений $ sudo ufwВы увидите следующий вывод с тремя профилями для трафика Nginx.
Вам нужно будет разрешить профиль «Nginx Full» в брандмауэре. Для этого используйте следующую команду:
$ sudo ufw позволяет 'Nginx Full'Чтобы проверить, разрешен ли профиль в брандмауэре, используйте следующую команду:
$ sudo ufw статусШаг 5. Проверьте файл конфигурации NGINX
Теперь проверьте файл конфигурации Nginx, используя следующую команду в Терминале:
$ sudo nginx -tВы должны увидеть результат ниже.
Теперь создайте символическую ссылку между сайтами, доступными и доступными:
Затем перезапустите службу Nginx, чтобы применить изменения конфигурации. Используйте для этого команду ниже:
$ sudo systemctl перезапустить nginxШаг 6. Протестируйте SSL
Теперь, чтобы проверить SSL, перейдите по следующему адресу:
https: // домен-или-IP-адрес
Поскольку мы настроили самозаверяющий сертификат, мы увидим предупреждение о том, что соединение небезопасно. Следующая страница появляется при использовании браузера Mozilla Firefox.
Щелкните значок Передовой кнопка.
Нажмите Добавить исключение.
Затем нажмите Подтвердить исключение безопасности.
Теперь вы увидите свой HTTPS-сайт, но с предупреждающим знаком (замок с желтым предупреждающим знаком) о безопасности вашего сайта.
Кроме того, проверьте, правильно ли работает перенаправление, получив доступ к вашему домену или IP-адресу с помощью http.
http: // домен-или-IP-адрес
Теперь, если ваш сайт автоматически перенаправляется на HTTPS, это означает, что перенаправление работает правильно. Чтобы настроить перенаправление навсегда, отредактируйте файл конфигурации блока сервера, используя следующую команду в Терминале:
$ sudo nano / etc / nginx / сайты-доступные / тест.orgТеперь измените возврат 302 возвращаться 301 в файле, а затем сохраните и закройте его.
Вот как вы можете настроить SSL для Nginx в системе Debian 10. Мы настроили самоподписанный сертификат для демонстрации. Если вы работаете в производственной среде, всегда используйте сертификат CA.