W tym artykule dowiesz się jak w kilku prostych krokach skonfigurować mTLS dla (sub)domeny w Cloudflare.
Wymagania:
– Konto w usłudze Cloudflare wraz z prawidłowo dodaną oraz aktywowaną domeną
– Dostęp do aplikacji OpenSSL
– Usługa www, dla której chcesz uruchomić mTLS musi być osiągalna przez Cloudflare (bezpośrednio przez Internet lub przy pomocy cloudflared)
Po co mTLS?
Wystawienie usługi do Internetu powoduje, że staje się ona dostępna dla całego świata. Już po chwili od wystawienia można spodziewać się pierwszych botów, które skanując automatycznie dostępny Internet napotkają nowo wystawioną usługę. Takie automaty mogą służyć różnym celom. Mogą poszukiwać konkretnych usług ze znanymi podatnościami, które następnie będą wykorzystywane do nieautoryzowanego dostępu.
Mogą to być również skanery wyszukiwarki Shodan, która kataloguje podłączone do Internetu urządzenia i pozwala na wyszukanie ich np. pod kątem wystawianych usług. Przykładowo, możesz w prosty sposób wyszukać dostępne w sieci instancje Home Assistant.
Upublicznienie własnej usługi w Internecie wprowadza szereg ryzyk związanych z bezpieczeństwem, które zdecydowanie warto zaadresować. Dostępnych jest wiele narzędzi, które mogą nam w tym pomóc, a w tym artykule skupię się na jednym z nich – mutual TLS (w skrócie: mTLS).
Czym jest i jak działa mTLS opisuje wiele artykułów w sieci, choćby ten na stronie Cloudflare. W skrócie, upraszczając:
Zwykły TLS pozwala nam zaszyfrować ruch oraz uwierzytelnić serwer, do którego się łączymy (np. stronę Banku). Uwierzytelnienie serwera realizowane jest przy pomocy certyfikatu, który serwer nam okazuje.
mTLS działa jak zwykły TLS, ale dodatkowo wymaga od klienta przedstawienia certyfikatu, a tym samym wymaga, aby klient również się uwierzytelnił.
Innymi słowy, używając mTLS, tylko klient posiadający odpowiedni certyfikat będzie w stanie podłączyć się do tak zabezpieczonej strony / web aplikacji.
mTLS jest zabezpieczeniem, które pozwoli na zmniejszenie ryzyk związanych z podatnościami w samej web aplikacji czy wyciekiem danych uwierzytelniających.
Ważne jest, aby certyfikat klienta dla mTLS traktować jak klucz do zabezpieczonej strony i dbać o to, aby nie wpadł w niepowołane ręce.
Konfiguracja mTLS w Cloudflare krok po kroku
W poniższym opisie znajdują się zrzuty ekranu z mojego konta Cloudflare. Na zrzutach zostały nałożone dwa typy elementów:
– czarne prostokąty, które mają za zadanie ocenzurować dane z mojego konta
– czerwone cyfry, które wskazują kolejność wykonywanych działań
Aby wyświetlić zrzut w pełnej rozdzielczości, wystarczy kliknąć w miniaturkę. Grafika otworzy się w nowej karcie.
- Zaloguj się do dashboardu Cloudflare i wejdź w konfigurację domeny
- W pierwszej kolejności musisz stworzyć certyfikat, którym klient (np. przeglądarka internetowa na komputerze) będzie się uwierzytelniać. Jeden certyfikat możesz zainstalować na wielu maszynach, możesz też dla każdego klienta wygenerować osobny.
W menu nawigacji po lewej rozwiń SSL/TLS i wybierz Client Certificates, a następnie kliknij w Create Certificate. - Teraz musisz wybrać, czy chcesz:
A. żeby Cloudflare wygenerował dla Ciebie klucz prywatny, CSR i automatycznie go podpisał
B. samemu wygenerować na własną rękę klucz prywatny oraz CSR i wysłać go do podpisania
W obu przypadkach certyfikaty zostaną podpisane przez dedykowane dla Twojego konta CA zarządzane przez Cloudflare. Jest to lokalne CA, nie zaufane nigdzie indziej, ale w tym wypadku nie ma to znaczenia. Ważne, że dzięki temu CA Cloudflare będzie w stanie odróżnić certyfikaty nieutoryzowane od tych autoryzowanych przez Ciebie.
Jeżeli zależy Ci na uwierzytelnieniu mTLS przy użyciu własnego CA, możesz to zrealizować w płatnym planie Enterprise. Więcej informacji znajdziesz tutaj.
Wersja darmowa pozwala na realizację wyżej opisanych opcji A i B.
Ostatnią rzeczą, którą należy wybrać jest okres ważności certyfikatu (Certificate Validity). Dostępne opcje to 1, 2, 3, 10 i 15 lat. Wybór okresu ważności determinuje częstotliwość, z jaką trzeba będzie certyfikat wymieniać na maszynach klienckich (komputer, telefon, itp.).
Pamiętaj, że w każdym momencie będziesz mógł podpisane certyfikaty unieważniać z poziomu swojego konta Cloudflare.
Podsumowując, wybierając opcję A, jedyne kroki do wygenerowania certyfikatu są na poniższym screenie (1A -> 2 -> 3)
Jeżeli wybierzesz opcję B to uznaję, że wiesz jak wygenerować klucz oraz CSR na własną rękę. Klikając w opcję 1B pojawi się okno do wklejenia CSR.
Klikając Create zostanie wyświetlone okno z certyfikatem w formacie PEM.
Wybierając wcześniej opcję A, dodatkowo wyświetlony zostanie klucz prywatny.
Skopiuj te informacje, ponieważ nie będziesz ich w stanie wyświetlić ponownie.
Powtórz kroki z tego punktu dla każdego kolejnego certyfikatu, który potrzebujesz. - Po wygenerowaniu wszystkich potrzebnych certyfikatów pojawią się one na liście Client Certificates w sekcji SSL/TLS.
Każdy z tych certyfikatów można unieważnić klikając Revoke.
Expires On to data ważności poszczególnych certyfikatów, a Status mówi nam czy dany certyfikat jest aktywny (Active), wygasł (Expired) lub został unieważniony (Revoked). - W następnym kroku musisz aktywować mTLS dla Twojej strony/webaplikacji osiąganej przez Cloudflare. W tym celu ponownie wejdź w Client Certificates w sekcji SSL/TLS, a następnie kliknij Edit.
Po kliknięciu pojawi się formularz, w którym możesz podać host, dla którego aktywujesz mTLS. Przez host mam na myśli adres (sub)domeny skonfigurowanej na koncie Cloudflare, pod którym dostępna jest strona/webaplikacja, np. asdx.connectedmatter.net lub connectedmatter.net i www.connectedmatter.net.
Po dodaniu wszystkich hostów, dla których ma zostać aktywowany mTLS kliknij Save.
Poza aktywowaniem hosta, musimy jeszcze stworzyć odpowiednią regułę w WAF (Web Application Firewall) Cloudflare, aby uwierzytelnienie działało.
W tym celu klikamy w Create mTLS Rule.
Zostaniesz przeniesiony do dashboardu tworzenia reguły WAF, od razu w szablon tworzenia reguł mTLS. Stworzenie podstawowej reguły ogranicza się do nadania jej nazwy (Rule name) oraz wybrania hosta (lub hostów), dla których został aktywowany mTLS. Hosty wybierasz w polu pod Hostname.
Na koniec wystarczy kliknąć Deploy i podstawowa konfiguracja mTLS po stronie Cloudflare jest zakończona. - Tu warto jeszcze wspomnieć o dość istotnej rzeczy. W momencie pisania tego artykułu, Cloudflare w podstawowej wersji ruli WAF dla mTLS nie weryfikuje, czy certyfikat został unieważniony.
Oznacza to, że mimo unieważnienia certyfikatu będzie on pozwalał na prawidłowe uwierzytelnienie zabezpieczonej strony. Ten mechanizm można w łatwy sposób zmienić i dodać również sprawdzenie przedstawianych przez klientów certyfikatów pod kątem ich unieważnienia.
W tym celu należy z poziomu konfiguracji naszej strony z Cloudflare (punkt 1 tego poradnika) rozwinąć menu Security, a następnie kliknąć WAF. Na wyświetlonej stronie zobaczysz listę wszystkich skonfigurowanych dla tej strony reguł WAF. Kliknij przycisk klucza płaskiego (edytuj) przy regule, która została założona w punkcie 5.
Wejdziesz w tryb edycji reguły.
Na ten moment dodanie weryfikacji unieważnienia certyfikatu nie jest wspierane przez edytor graficzny. Aby dodać tę weryfikację, kliknij Edit expression.
W polu pod When incoming requests match… edytujesz obecny tam tekst, który powinien wyglądać mniej więcej tak:(http.host in {"twoj.host.pl"} and not cf.tls_client_auth.cert_verified)
na analogczny do tego:(http.host in {"twoj.host.pl"}) and (not cf.tls_client_auth.cert_verified or cf.tls_client_auth.cert_revoked)
Co tu się dzieje?
Otóż reguła na końcu ma Block, zatem jeżeli wynik sprawdzania requestu będzie prawdą (true), taki request zostanie zablokowany.
Oryginalna reguła mówi:
Host, do którego odwołuje się klient to twoj.host.pl oraz request NIE przedstawia prawidłowego certyfikatu.
Natomiast zmodyfikowana reguła mówi:
Host, do którego odwołuje się klient to twoj.host.pl oraz klient NIE przedstawia prawidłowego certyfikatu
lub
Host, do którego odwołuje się klient to twoj.host.pl oraz klient przedstawia unieważniony certyfikat
Po wyedytowaniu kliknij Save.
Przygotowanie oraz instalacja certyfikatów na maszynie klienckiej
Po uruchomieniu mTLS strona stanie się dla nas niedostępna, a próba wejścia na nią bez zainstalowanego odpowiedniego certyfikatu skutkuje wyświetleniem błędu jak poniżej.
Procedura instalacji (importu) certyfikatu na kliencie może się różnić w zależności od typu sprzętu czy wersji oprogramowania. Dlatego najlepiej postępować zgodnie z dokumentacją udostępnioną przez producenta. W tym artykule pokażę jak użyć certyfikatu na systemie Windows 10 oraz Android 13.
Zarówno dla Windows jak i Android, pierwszym etapem jest przygotowanie certyfikatu w formacie PKCS12. Oprócz samego certyfikatu, plik ten musi zawierać również skorelowany z nim klucz prywatny. W tym opisie posłużę się plikami w formacie PEM – to format, w którym Cloudflare wygenerował dla Ciebie klucz oraz certyfikat w punkcie 3, opcja A.
W celu wygenerowania pliku PKCS12 można posłużyć się aplikacją OpenSSL.
Składnia polecenia wygląda następująco:
openssl pkcs12 -export -inkey priv.key -in clientcert.pem -out clientcert.p12
gdzie:
priv.key to ścieżka do pliku z kluczem prywatnym
clientcert.pem to ścieżka do pliku z certyfikatem
clientcert.p12 to ścieżka pliku wynikowego
Więcej informacji znajdziesz w dokumentacji.
OpenSSL poprosi Cię o hasło, którym zabezpieczony zostanie plik. Zapamiętaj je lub zapisz – będzie potrzebne podczas importu certyfikatu na maszynie klienckiej.
Aby zaimportować certyfikat w Windows, wystarczy dwukrotnie kliknąć lewym przyciskiem myszy na pliku p12, aby otworzyło się okno kreatora importu certyfikatu. Kreator poprowadzi Cię za rękę w procesie importu. W przypadku wątpliwości do jakiego magazynu należy zaimportować certyfikat, wybierz Osobiste.
Listę certyfikatów dla bieżącego użytkownika możesz podejrzeć uruchamiając certmgr.msc. Dla listy lokalnego komputera należy uruchomić konsolę mmc, dodać przystawkę Certyfikaty i wybrać Konto komputera.
W przypadku urządzeń pracujących pod kontrolą systemu Android 13, wystarczy tapnąć plik z certyfikatem z poziomu aplikacji, np. dowolnego managera plików. System poprosi Cię o podanie hasła, a następnie nadanie nazwy certyfikatowi – nazwę możesz nadać dowolną, choć najlepiej podać coś co jednoznacznie pozwoli Ci później ten certyfikat zidentyfikować. Jako cel użycia wybierz VPN i aplikacje.
Listę certyfikatów możesz sprawdzić wchodząc w Ustawienia -> Bezpieczeństwo i prywatność -> Więcej ustawień bezpieczeństwa -> Szyfrowanie i dane logowania -> Dane logowania użytkownika.
Dodaj komentarz