Как защитить трафик в HTTP и HTTPS от перехвата
Что проверяют
Понимаете ли вы, от чего защищает TLS и где защита заканчивается: на прокси, внутри кластера, на клиенте без проверки сертификата. Следом обычно просят показать настройку tls.Config в Go или спрашивают, как защитить трафик между микросервисами.
Как отвечать
Честный ответ про HTTP: от перехвата его не защитить, его заменяют на HTTPS. Остальное про то, как сделать HTTPS правильно.
На сервере:
- только HTTPS: порт 80 отвечает редиректом на 443, плюс заголовок
Strict-Transport-Securityсmax-ageиincludeSubDomains, чтобы браузер больше не ходил по HTTP и не попадался на атаку понижения; - TLS в Go:
http.ServerсTLSConfigиListenAndServeTLS. ЗадайтеMinVersion: tls.VersionTLS12явно. Наборы шифров для TLS 1.3 Go выбирает сам, полеCipherSuitesна них не влияет, и это нормально. SSL и TLS 1.0/1.1 устарели и должны быть выключены; - сертификаты: Let's Encrypt, в Go для этого есть
golang.org/x/crypto/acme/autocert, но чаще TLS терминирует Caddy, nginx или Ingress; - куки и токены: флаги
Secure,HttpOnly,SameSite, а токены не кладут в query-строку, она оседает в логах прокси.
На клиенте, в http.Client вашего сервиса:
- проверка сертификата:
InsecureSkipVerify: trueдопустим только в локальной отладке, иначе HTTPS от MITM не защищает вовсе. Внутренний CA добавляют вRootCAsчерезx509.CertPool.
Между сервисами:
- mTLS: сервер требует сертификат клиента через
ClientAuth: tls.RequireAndVerifyClientCertиClientCAs. В Kubernetes это часто отдают service mesh, Istio или Linkerd, чтобы не выпускать сертификаты руками.
TLS 1.3 делает прямую секретность обязательной: даже утечка приватного ключа сервера не раскроет записанный ранее трафик.
Где спотыкаются
Считают, что HTTPS на балансировщике закрывает вопрос. За ним трафик до подов идёт открытым текстом, и его читает любой, кто попал во внутреннюю сеть.
Отключают проверку сертификата в Go-клиенте, «чтобы заработало», и этот код доезжает до продакшена.
Отвечают про CSP, валидацию ввода и авторизацию. Это полезные вещи, но к перехвату трафика они отношения не имеют.