mTLS

Wariant TLS, w którym obie strony połączenia wzajemnie weryfikują swoją tożsamość za pomocą certyfikatów. Powszechnie stosowany do zabezpieczania komunikacji między mikrousługami.

mTLS (Mutual TLS, czyli wzajemny TLS) to wariant zwykłego TLS, w którym obie strony połączenia udowadniają sobie nawzajem tożsamość za pomocą certyfikatów. W klasycznym HTTPS to tylko serwer pokazuje certyfikat, a klient (Twoja przeglądarka) jedynie go sprawdza. W mTLS klient też musi przedstawić swój certyfikat, więc serwer wie, kto naprawdę puka do drzwi. Krótko: zamiast jednostronnego „pokaż dowód”, masz wymianę dowodów w obie strony.

Jak to działa i do czego służy

Podczas TLS handshake serwer wysyła swój certyfikat, a przy mTLS dodatkowo żąda certyfikatu od klienta (CertificateRequest). Klient odsyła własny certyfikat i podpisuje fragment komunikacji swoim kluczem prywatnym, czego serwer nie da się podrobić bez tego klucza. Obie strony weryfikują, czy certyfikat drugiej strony został podpisany przez zaufane CA (Certificate Authority). Dopiero gdy oba sprawdzenia przejdą, ruch zaczyna płynąć szyfrowanym tunelem.

Po co to komu? mTLS świetnie sprawdza się tam, gdzie po obu stronach są maszyny, nie ludzie: komunikacja między mikroserwisami, API service-to-service, IoT, integracje B2B. To tożsamość bez haseł i tokenów — sam certyfikat jest dowodem, kim jesteś. Stąd mTLS to fundament podejścia Zero Trust, gdzie nic w sieci nie jest „zaufane z automatu”.

Przykład z praktyki

Najpopularniejszy scenariusz to service mesh, np. Istio albo Linkerd na Kubernetesie. Sidecar proxy (Envoy) automatycznie nawiązuje mTLS między podami, rotuje certyfikaty i robi to bez zmian w Twoim kodzie. Sam ją tylko włączasz polityką, np. tryb STRICT, i nagle cały ruch wewnątrz klastra jest wzajemnie uwierzytelniony.

Chcesz przetestować mTLS ręcznie? Z curl wygląda to tak:

curl --cert client.crt --key client.key --cacert ca.crt https://api.example.com

Częste błędy i pułapki

  • Wygasłe certyfikaty. Klasyk. Certyfikat klienta wygasa i pół systemu przestaje gadać o 3 w nocy. Automatyzuj rotację (cert-manager, SPIFFE/SPIRE), nie polegaj na pamięci.
  • Mylenie szyfrowania z autoryzacją. mTLS mówi kim jest druga strona, ale nie co jej wolno. Autoryzację (kto ma dostęp do czego) i tak musisz dorobić osobno.
  • mTLS dla ruchu od ludzi. Wciskanie certyfikatów klienckich do przeglądarek użytkowników to ból organizacyjny — od tego są raczej logowanie i tokeny.

Pojęcia powiązane: TLS, SSL, certyfikat X.509, CA (Certificate Authority), PKI, klucz publiczny i prywatny, Zero Trust, service mesh, SPIFFE/SPIRE.