Anton Sidorov homepage

Bookmark this to keep an eye on my project updates!

Follow me on GitHub

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-запросы
  • Если важна защита от MITM, лучше использовать End-to-End TLS.
  • Если важна оптимизация производительности и анализ трафика, выбирают TLS Termination, но с защитой сети (например, mTLS между proxy и backend).
    • mTLS между proxy и backend — это надежная защита от MITM-атак, так как обе стороны должны предъявить доверенные сертификаты. Использование cert-manager и Istio позволяет автоматизировать управление сертификатами в Kubernetes.