TLS Termination
Зачем
- Оптимизация нагрузки на бэкенды
- Шифрование/дешифрование TLS требует ресурсов. Перенос этой задачи на прокси снижает нагрузку на бэкенд-серверы.
- Централизованное управление сертификатами
- Легче управлять сертификатами, обновлять их и обеспечивать их корректность на одном узле, чем на каждом бэкенде.
- Гибкость в маршрутизации
- Reverse proxy (например, Nginx, HAProxy, Traefik) может принимать HTTPS-трафик, расшифровывать его и направлять на нужные серверы, применяя балансировку нагрузки, кэширование и другие функции.
- Инспекция и безопасность
- Если трафик шифрован end-to-end, его сложнее анализировать на предмет угроз. При TLS Termination можно проводить IDS/IPS анализ, фильтрацию, DLP и другие проверки.
Чтобы снизить риск MiTM применяется:
- End-to-End TLS (шифрование до backend-сервера, без расшифровки на proxy)
- Плюсы:
- Максимальная защита от MITM — трафик остается зашифрованным даже внутри сети компании.
- Безопасность backend-сервисов — атакующему сложнее перехватить или изменить данные.
- Соответствие требованиям безопасности — многие регуляции (GDPR, PCI DSS) требуют e2e-шифрования.
- Минусы:
- Высокая нагрузка на backend — серверу приходится самостоятельно расшифровывать каждое соединение.
- Сложнее инспектировать трафик — WAF, DLP и IDS-системы не могут анализировать зашифрованные данные.
- Усложненное управление сертификатами — каждый backend-сервис должен иметь свой актуальный сертификат.
- Не работает маршрутизация по url:
- При E2E TLS Nginx не расшифровывает запросы, а просто проксирует их в зашифрованном виде на backend.
- может маршрутизировать запросы по
- Host (SNI) TCP-level SNI Routing
- URI если используется HTTP/2 ALPN Proxying
- Есть вариант L7 (URL-based) маршрутизация — Только с Terminate + Reencrypt
- Если нужно маршрутизировать по URL (например, /api → backend1, /auth → backend2), Nginx должен расшифровать TLS (TLS Termination), а затем повторно зашифровать (TLS Re-encryption)
- Позволяет маршрутизировать по URL, но требует расшифровки запроса
- Не является чистым E2E TLS, так как Nginx видит HTTP-запросы
- может маршрутизировать запросы по
- При E2E TLS Nginx не расшифровывает запросы, а просто проксирует их в зашифрованном виде на backend.
- Плюсы:
- Если важна защита от MITM, лучше использовать End-to-End TLS.
- Если важна оптимизация производительности и анализ трафика, выбирают TLS Termination, но с защитой сети (например, mTLS между proxy и backend).
- mTLS между proxy и backend — это надежная защита от MITM-атак, так как обе стороны должны предъявить доверенные сертификаты. Использование cert-manager и Istio позволяет автоматизировать управление сертификатами в Kubernetes.