0Pricing
Cryptology Academy · Lekcja

Wzorce implementacji Mutual TLS (mTLS)

Proszę skonfigurować mTLS do uwierzytelniania między usługami i rotacji certyfikatów oraz poznać typowe pułapki implementacyjne.

Wzorce implementacji Mutual TLS (mTLS) to bezpłatna lekcja Cryptology Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cryptology Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cryptology Academy zawiera 4 lekcji w sumie.

Czym jest wzajemne TLS

Standardowy TLS uwierzytelnia wyłącznie serwer wobec klienta za pomocą certyfikatu. Wzajemne TLS (mTLS) rozszerza ten mechanizm: obie strony przedstawiają certyfikaty i weryfikują je. Klient przedstawia certyfikat klienta po otrzymaniu żądania serwera (za pomocą CertificateRequest podczas uzgadniania TLS). Serwer weryfikuje certyfikat klienta względem zaufanego CA. mTLS stanowi podstawę sieci w modelu zero trust: zamiast polegać na bezpieczeństwie granic sieci, usługi uwierzytelniają się wzajemnie kryptograficznie przy każdym połączeniu. Service meshe, takie jak Istio, Linkerd i Consul Connect, w sposób przezroczysty implementują mTLS między mikrousługami.

Przebieg uzgadniania mTLS

Uzgadnianie mTLS rozszerza TLS 1.3 w następujący sposób: po ServerHello oraz certyfikacie serwera i Finished serwer wysyła komunikat CertificateRequest określający akceptowane urzędy certyfikacji i algorytmy podpisu. Klient odpowiada komunikatami Certificate (łańcuch certyfikatu klienta) oraz CertificateVerify (podpis transkryptu wykonany za pomocą klucza prywatnego klienta). Serwer weryfikuje łańcuch certyfikatu klienta względem magazynu zaufanych CA i sprawdza podpis CertificateVerify. Jeśli obie weryfikacje się powiodą, połączenie jest wzajemnie uwierzytelnione. Klient nie może sfałszować CertificateVerify bez klucza prywatnego odpowiadającego certyfikatowi.

Wydawanie certyfikatów klienta

W środowiskach service mesh certyfikaty klienta są zwykle wydawane przez wewnętrzny urząd certyfikacji (CA). Istio używa identyfikatorów SPIFFE (Secure Production Identity Framework for Everyone) SVID: każdy workload otrzymuje certyfikat z identyfikatorem URI SAN (Subject Alternative Name) SPIFFE, takim jak spiffe://cluster.local/ns/default/sa/payment-service. Certyfikaty te są krótkotrwałe (24 godziny) i są automatycznie rotowane przez płaszczyznę sterowania mesha (istiod). W mTLS skierowanym do użytkownika (np. w firmowych sieciach VPN lub wśród klientów API) certyfikaty mogą być wydawane przez firmowy urząd certyfikacji, mieć dłuższy czas życia i być dostarczane za pośrednictwem MDM (zarządzania urządzeniami mobilnymi) na urządzenia pracowników.

Weryfikacja certyfikatu w mTLS

Weryfikacja mTLS po stronie serwera obejmuje kilka etapów: (1) Walidacja łańcucha — sprawdzenie, czy łańcuch certyfikatu klienta prowadzi do zaufanego głównego CA w magazynie CA klientów serwera. (2) Sprawdzenie okresu ważności — upewnienie się, że certyfikat nie wygasł ani nie zaczął jeszcze obowiązywać. (3) Sprawdzenie unieważnienia — potwierdzenie za pomocą OCSP lub CRL, że certyfikat nie został unieważniony. (4) Dopasowanie SAN/CN — wyodrębnienie deklaracji tożsamości z SAN certyfikatu (identyfikatora URI SPIFFE, nazwy DNS lub adresu e-mail). (5) Autoryzacja — sprawdzenie, czy uwierzytelniona tożsamość ma uprawnienia do dostępu do żądanego zasobu. Etapy 4 i 5 wymagają logiki na poziomie aplikacji wykraczającej poza podstawową konfigurację TLS.

Wzorce rotacji certyfikatów

Krótkotrwałe certyfikaty eliminują potrzebę jawnego unieważniania: jeśli certyfikat wygasa po 24 godzinach, okno skutków jego przejęcia jest ograniczone. Rotacja wymaga: (1) Rotacji wstępnej — wystawienia nowego certyfikatu przed wygaśnięciem starego (rotację należy wykonać po upływie 80% okresu ważności). (2) Podmiany bez przestoju — usługa musi akceptować zarówno stare, jak i nowe certyfikaty w okresie przejściowym. (3) Kontrolowanego przeładowania — stos TLS musi przeładowywać dane uwierzytelniające bez zrywania istniejących połączeń (nginx: nginx -s reload; Envoy: dynamic xDS certificate update). SPIFFE Workload API (implementowane przez SPIRE) automatyzuje dostarczanie i rotację certyfikatów za pośrednictwem API gniazda domeny Unix.

mTLS w Kubernetes z Istio

Istio implementuje mTLS w sposób przezroczysty za pośrednictwem proxy sidecar Envoy wstrzykiwanych do każdego poda. Płaszczyzna sterowania (istiod) działa jako CA, używając certyfikatu pośredniego podpisanego przez główny urząd certyfikacji siatki. Sidecar każdego poda otrzymuje SPIFFE SVID za pośrednictwem interfejsu API SDS (Secret Discovery Service). Zasady PeerAuthentication konfigurują tryb mTLS: STRICT (mTLS wymagane), PERMISSIVE (akceptowane jest zarówno mTLS, jak i połączenia w jawnym tekście, na potrzeby migracji) lub DISABLE. Zasoby AuthorizationPolicy określają, które usługi mogą się ze sobą komunikować; uprawnienia są sprawdzane na podstawie tożsamości SPIFFE zawartej w certyfikacie klienta. Mechanizm ten zapewnia architekturę zero trust w obrębie klastra bez zmian w kodzie aplikacji.

Certyfikat klienta w uwierzytelnianiu API

W przypadku zewnętrznych klientów API mTLS zapewnia silniejsze uwierzytelnianie niż klucze API lub tokeny OAuth. Klient przechowuje klucz prywatny w bezpiecznym magazynie (HSM, magazynie kluczy systemu operacyjnego albo programowym magazynie kluczy chronionym hasłem). Certyfikat klienta jest przypięty do oczekiwanego CA punktu końcowego API. Każde żądanie API jest uwierzytelniane na poziomie TLS — nie jest wymagany osobny nagłówek Authorization. Cloudflare API Shield, certyfikaty klientów AWS API Gateway oraz mTLS dla kont usług Google Cloud implementują ten model. Zaatakowany klucz API może zostać użyty z dowolnego miejsca, natomiast wykorzystanie zaatakowanego klucza prywatnego mTLS wymaga również kradzieży urządzenia, na którym działa klient.

Wyzwania i pułapki związane z mTLS

Wdrożenia mTLS wiążą się z kilkoma wyzwaniami operacyjnymi. (1) Dystrybucja certyfikatów — bezpieczne dostarczanie certyfikatów klienta do wszystkich usług, szczególnie w dynamicznych środowiskach, w których liczba podów zmienia się w czasie. (2) Kompromitacja CA — wewnętrzny urząd certyfikacji jest celem o wysokiej wartości; w przypadku jego kompromitacji wszystkie certyfikaty usług zostają unieważnione. Ograniczyć to ryzyko pomagają urzędy certyfikacji wspierane przez HSM oraz główne urzędy certyfikacji działające offline. (3) Debugowanie — zaszyfrowany ruch mTLS jest nieczytelny dla standardowych narzędzi debugujących; potrzebna jest obserwowalność siatki usług (Jaeger, Kiali). (4) Zgodność z urządzeniami pośredniczącymi — proxy przeprowadzające inspekcję TLS przerywają mTLS, chyba że zostaną jawnie skonfigurowane do przekazywania certyfikatów klienta. (5) Incydenty związane z wygaśnięciem certyfikatów — nieudana rotacja może spowodować całkowitą niedostępność usług.

Architektura SPIFFE i SPIRE

SPIFFE (Secure Production Identity Framework for Everyone) definiuje standard tożsamości obciążeń wykorzystujący SVID X.509. SPIRE (SPIFFE Runtime Environment) jest implementacją referencyjną. SPIRE Server działa jako urząd rejestracji i CA. SPIRE Agents działają na każdym węźle, potwierdzają tożsamość obciążenia za pomocą mechanizmów potwierdzających tożsamość węzła (AWS instance identity, Kubernetes service account JWT, TPM) oraz mechanizmów potwierdzających tożsamość obciążenia (Unix PID, metadane środowiska uruchomieniowego kontenera). Workload API dostarcza obciążeniom SVID za pośrednictwem gniazda domeny Unix, wykorzystując prosty interfejs API gRPC. SPIRE integruje się z Envoy, Nginx oraz głównymi siatkami usług jako źródło certyfikatów.

mTLS z wykorzystaniem modułów HSM

W przypadku wdrożeń mTLS o wysokim poziomie bezpieczeństwa klucze prywatne powinny znajdować się w modułach HSM (Hardware Security Modules), a nie w programowych magazynach kluczy. Biblioteka TLS (OpenSSL, BoringSSL) ładuje klucz prywatny za pośrednictwem interfejsu PKCS#11, który przekierowuje operacje podpisywania do HSM. Klucz prywatny nigdy nie opuszcza granic HSM w postaci jawnego tekstu. Dostępne w chmurze moduły HSM obejmują AWS CloudHSM, Azure Dedicated HSM i Google Cloud HSM. W przypadku mTLS na poziomie urządzenia (IoT, laptopy firmowe) podobną funkcję zapewnia TPM 2.0 — klucz klienta TLS jest powiązany z TPM, a podpisywanie wymaga autoryzacji TPM, co znacznie utrudnia wyodrębnienie klucza ze skompromitowanego urządzenia.

Testowanie konfiguracji mTLS

Testowanie mTLS wymaga narzędzi obsługujących przedstawianie certyfikatu klienta. OpenSSL s_client: openssl s_client -connect host:443 -cert client.pem -key client.key -CAfile server-ca.pem. curl: curl --cert client.pem --key client.key --cacert server-ca.pem https://host. Do testowania siatki usług polecenie istioctl proxy-config secret pod/name pokazuje bieżący certyfikat i termin jego ważności. Należy wykonać kubectl exec w podzie, a następnie użyć curl do wywołania punktu końcowego administratora sidecara (localhost:15000), aby sprawdzić aktywne listenery i ich konfigurację mTLS. Automatyczne testy rotacji powinny sprawdzać, czy połączenia pozostają stabilne podczas zdarzeń rotacji certyfikatów.

Quiz dotyczący uwierzytelniania mTLS

Jaki dodatkowy krok wprowadza mTLS w porównaniu ze standardowym TLS?

Podsumowanie mTLS

mTLS dodaje do TLS uwierzytelnianie za pomocą certyfikatu klienta — obie strony weryfikują wzajemnie swoje certyfikaty. SPIFFE SVID zapewniają standaryzowaną tożsamość obciążenia za pośrednictwem identyfikatorów URI SPIFFE w polach SAN certyfikatu. Istio implementuje mTLS w sposób przezroczysty za pośrednictwem sidecarów Envoy z trybami STRICT/PERMISSIVE. Certyfikaty krótkoterminowe (24 godziny) eliminują potrzebę unieważniania certyfikatów i ograniczają czas wykorzystania skutków kompromitacji. SPIRE automatyzuje wystawianie i rotację certyfikatów za pośrednictwem Workload API. Wdrożenia o wysokim poziomie bezpieczeństwa powinny przechowywać klucze prywatne mTLS w HSM lub TPM. Wyzwania operacyjne obejmują ochronę klucza CA, zgodność z urządzeniami pośredniczącymi oraz rotację bez przestojów.

Często zadawane pytania

Czy lekcja „Wzorce implementacji Mutual TLS (mTLS)” jest bezpłatna?

Tak — pełny tekst „Wzorce implementacji Mutual TLS (mTLS)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cryptology Academy, przejdź na CoddyKit PRO. Kurs Cryptology Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wzorce implementacji Mutual TLS (mTLS)”?

Proszę skonfigurować mTLS do uwierzytelniania między usługami i rotacji certyfikatów oraz poznać typowe pułapki implementacyjne. Ćwiczysz Cryptology Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cryptology Academy?

Nie wymagamy żadnego doświadczenia. Cryptology Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Wzorce implementacji Mutual TLS (mTLS)”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cryptology Academy?

Tak. Każda lekcja Cryptology Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. TLS 1.3: 0-RTT, wczesne dane i wznawianie sesji
  2. Wzorce implementacji Mutual TLS (mTLS)
  3. Przypinanie certyfikatów w aplikacjach mobilnych i desktopowych
  4. Wydajność TLS: QUIC i HTTP/3
← Powrót do Cryptology Academy