Настройка надёжного SSL для NginX и Apache

Обновлено 11 янв. 2019 г.

В этой статье перечислены основные настройки для повышения безопасности серверов Apache и Nginx.

Принудительное использование зашифрованного соединения

Когда пользователи заходят по ссылке http://hotels.com через открытый Wi-Fi в кафе, их данные могут быть похищены.

Часто веб-серверы настроены таким образом, чтобы перенаправлять пользователя с незащищённого HTTP соединения на защищённое HTTPS. Но мало просто перенаправить пользователя, нужно ещё дать команду браузеру о том, что сайтом можно пользоваться только по зашифрованному каналу. Иначе открытый канал передачи данных останется доступен.

Допустим, домен вашего сайта example.com. Пользователь заходит по адресу http://example.com, а веб-сервер автоматически перенаправляет его на https://example.com. После этого он логинится. Затем в мессенджере пользователь кликает на ссылку http://example.com. В этот момент браузер отправляет запрос со всеми данными авторизации по открытому каналу.

Этой утечки можно избежать, добавив всего одну строчку в конфигурацию веб-сервера. После первого посещения сайта по зашифрованному соединению, браузер получит команду о том, что сайтом необходимо пользоваться только по протоколу HTTPS. За эту функцию отвечает заголовок Strict-Transport-Security.

Активация XSS-защиты

XSS уязвимости это целый набор всевозможных способов атак. Заголовок X-XSS-Protection может предотвратить некоторые XSS-атаки.

Запрет использования сайта в iFrame

Если ваш сайт можно загрузить в iFrame, то вы уязвимы для Clickjacking атак. Заголовок X-Frame-Options позволяет снизить уязвимость.

Использование последних версий TLS

TLS это протокол для защищённого обмена данными. Важно использовать его актуальные версии TLS v1.2 и TLS v1.3.

Forward Secrecy

Вы можете указать своему серверу использовать усиленные методы шифрования.

Конфигурация Nginx

Добавьте эти строчки в секцию server {} в файл настройки виртуального хоста. Вы можете найти её по строчке listen 443;.

add_header Strict-Transport-Security "max-age=31536000;includeSubDomains" always;
add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options "SAMEORIGIN";

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers "HIGH:!RC4:!aNULL:!MD5:!kEDH";
ssl_prefer_server_ciphers on;

Конфигурация Apache

Добавьте эти строки в файл конфигурации виртуального хоста в секцию настроек защищённого соединения. Вы можете найти её по строчке <VirtualHost *:443>.

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header set X-XSS-Protection "1; mode=block"
Header always append X-Frame-Options SAMEORIGIN

SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite HIGH:!RC4:!aNULL:!MD5
SSLHonorCipherOrder On
Мы используем cookie. Продолжая пользоваться сайтом, вы соглашаетесь на обработку персональных данных в соответствии с политикой конфиденциальности. Ладушки