Podstawy TLS i HTTPS
Poznasz rolę TLS i HTTPS, podstawowe elementy certyfikatu oraz proste komendy do sprawdzania bezpiecznego połączenia ze stroną.
Wróć do listy lekcji1. Krótka teoria
HTTP przesyła żądania i odpowiedzi bez własnej warstwy szyfrowania. HTTPS to HTTP używane przez połączenie chronione TLS. TLS zapewnia poufność, integralność i uwierzytelnienie serwera, dzięki czemu użytkownik może sprawdzić, czy łączy się z właściwą stroną i czy dane nie są łatwo czytane po drodze. Certyfikat serwera zawiera między innymi nazwę domeny, okres ważności, klucz publiczny i informację o wystawcy. Klucz prywatny odpowiadający certyfikatowi zostaje na serwerze i musi być chroniony. CA, czyli urząd certyfikacji, podpisuje certyfikat lub pośredni certyfikat w łańcuchu zaufania. Przeglądarka i narzędzia systemowe sprawdzają, czy certyfikat pasuje do domeny, czy nie wygasł i czy prowadzi do zaufanego CA. Do podstawowej diagnostyki wystarczy curl -I, który pokaże nagłówki odpowiedzi HTTPS, oraz openssl s_client, który pozwala obejrzeć szczegóły połączenia TLS i łańcucha certyfikatów. Certyfikat nie naprawia błędów aplikacji, ale jest niezbędną warstwą bezpiecznej komunikacji w publicznym internecie.
2. Przykłady komend
curl -I https://example.com
Pobiera nagłówki odpowiedzi HTTPS bez treści strony.
$ curl -I https://example.com
curl -Iv https://example.com
Pokazuje bardziej szczegółowy przebieg połączenia, w tym informacje TLS.
$ curl -Iv https://example.com
openssl s_client -connect example.com:443 -servername example.com
Nawiązuje połączenie TLS i pokazuje informacje o certyfikacie serwera.
$ openssl s_client -connect example.com:443 -servername example.com
openssl s_client -connect example.com:443 -servername example.com -showcerts
Pokazuje certyfikaty przesłane przez serwer w trakcie połączenia TLS.
$ openssl s_client -connect example.com:443 -servername example.com -showcerts
echo | openssl s_client -connect example.com:443 -servername example.com
Wykonuje szybki test połączenia TLS bez ręcznego kończenia sesji.
$ echo | openssl s_client -connect example.com:443 -servername example.com
curl -I http://example.com
Pozwala porównać odpowiedź HTTP z odpowiedzią HTTPS, jeśli serwer obsługuje oba warianty.
$ curl -I http://example.com
3. Zadanie praktyczne
curl -I http://example.com i curl -I https://example.com. Zwróć uwagę na kod odpowiedzi, ewentualne przekierowanie oraz użyty schemat adresu. Następnie uruchom openssl s_client -connect example.com:443 -servername example.com i odszukaj informacje o certyfikacie, nazwie serwera oraz wyniku weryfikacji. Na końcu zapisz własnymi słowami, czym różni się certyfikat od klucza prywatnego i dlaczego klucza prywatnego nie wolno udostępniać.
4. Typowe błędy
- Mylenie HTTPS z samym przekierowaniem HTTP.
- Traktowanie certyfikatu jako sekretu, a klucza prywatnego jako pliku publicznego.
- Ignorowanie daty ważności certyfikatu.
- Pomijanie zgodności nazwy domeny z certyfikatem.
- Zakładanie, że poprawny certyfikat oznacza brak błędów w aplikacji.
- Uruchamianie openssl s_client bez parametru -servername przy domenach korzystających z SNI.
5. Podsumowanie
HTTPS to HTTP chronione przez TLS. Certyfikat pomaga potwierdzić tożsamość serwera, klucz prywatny musi pozostać tajny, a CA buduje łańcuch zaufania. curl -I pozwala szybko sprawdzić odpowiedź HTTPS, a openssl s_client pokazuje szczegóły połączenia TLS i certyfikatów. Poprawny TLS jest podstawą bezpiecznej komunikacji, ale nie zastępuje poprawnej konfiguracji aplikacji.