Код-ревью 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 и онлайн-сканеры конфигурации.

Что должен найти ревьюер

  1. Безопасностьстрока 4
    На 80 порту сайт отдаётся по HTTP вместо редиректа на HTTPS: логины и cookie можно перехватить. Нужен return 301 https://$host$request_uri;.
  2. Ошибкастрока 9
    Указан только сертификат сайта без промежуточных: часть клиентов (curl, Java, мобильные) не проверит цепочку. Нужен fullchain.
  3. Безопасностьстрока 11
    TLS 1.0 и 1.1 устарели и небезопасны, их отключают. Оставить TLSv1.2 TLSv1.3.
  4. Безопасностьстрока 12
    Нет заголовка HSTS: браузер может снова прийти по HTTP. Добавить Strict-Transport-Security после проверки, что всё работает по HTTPS.
  5. Производительностьстрока 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 ошибок.