Код-ревью Middle DNS, TLS и прокси обновлено
Код-ревью: TLS в nginx
Вопрос
Найдите проблемы в TLS-настройке сайта.
server {
listen 80;
server_name shop.example.ru;
location / { proxy_pass http://app; }
}
server {
listen 443 ssl;
server_name shop.example.ru;
ssl_certificate /etc/ssl/shop.crt;
ssl_certificate_key /etc/ssl/shop.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / { proxy_pass http://app; }
}
Коротко
Минимальный современный TLS-сервер: редирект с 80 на 443, fullchain, только TLS 1.2 и 1.3, HSTS, HTTP/2 и автоматическое продление сертификата. Проверка снаружи: openssl sclient и онлайн-сканеры конфигурации.
Что должен найти ревьюер
- Безопасностьстрока 4На 80 порту сайт отдаётся по HTTP вместо редиректа на HTTPS: логины и cookie можно перехватить. Нужен
return 301 https://$host$request_uri;. - Ошибкастрока 9Указан только сертификат сайта без промежуточных: часть клиентов (curl, Java, мобильные) не проверит цепочку. Нужен fullchain.
- Безопасностьстрока 11TLS 1.0 и 1.1 устарели и небезопасны, их отключают. Оставить
TLSv1.2 TLSv1.3. - Безопасностьстрока 12Нет заголовка HSTS: браузер может снова прийти по HTTP. Добавить
Strict-Transport-Securityпосле проверки, что всё работает по HTTPS. - Производительностьстрока 7Не включён HTTP/2 (
http2 on;илиlisten 443 ssl http2в старых версиях): лишние соединения и медленнее загрузка.
Разбор
Минимальный современный TLS-сервер: редирект с 80 на 443, fullchain, только TLS 1.2 и 1.3, HSTS, HTTP/2 и автоматическое продление сертификата. Проверка снаружи: openssl s_client и онлайн-сканеры конфигурации.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.