SNI
SNI to pole na początku połączenia HTTPS, w którym program podaje nazwę strony, z którą się łączy.
Zaktualizowano · Redakcja Prokso
Na jednym adresie IP serwera mogą działać setki stron. Żeby serwer wiedział, jaki certyfikat pokazać, program jeszcze przed szyfrowaniem przekazuje nazwę strony – to właśnie SNI.
Pole SNI zwykle nie jest szyfrowane. Dlatego nawet bez dostępu do treści sieć i proxy widzą, na jaką stronę wchodzisz – ale nie adresy podstron ani dane.
Właśnie tak usługa proxy może prowadzić ewidencję domen, nie wiedząc, co dzieje się wewnątrz połączenia. Więcej o szyfrowaniu – w artykule TLS.
W Prokso treść i adresy stron ani hasła nie są przechowywane; na potrzeby rozpatrywania skarg przechowujemy tylko domeny, czas i ilość danych – przez 90 dni.
Gdzie dokładnie w połączeniu znajduje się SNI
SNI to rozszerzenie komunikatu ClientHello, pierwszego pakietu uzgadniania TLS. Pole nazywa się server_name i zawiera nazwę hosta, na przykład example.com, bez ścieżki i bez portu. Serwer odczytuje je i wybiera certyfikat jeszcze przed uzgodnieniem kluczy.
Przez proxy HTTP nazwa strony pojawia się dwa razy: najpierw w linii CONNECT example.com:443 dla tunelu, potem w SNI wewnątrz tunelu. Proxy czyta tylko pierwszą, druga trafia do strony bez zmian. Zwykle obie nazwy są takie same.
Dlaczego połączenie po adresie IP psuje HTTPS
Standard pozwala umieścić w SNI tylko nazwę hosta, a nie adres IP. Jeśli program otwiera https://203.0.113.10/, nie wysyła nazwy, a serwer z wieloma stronami zwraca certyfikat domyślny. Efekt to błąd niezgodności nazwy, choć sama strona działa. Dlatego w ustawieniach programów i skryptów podawaj nazwę strony, a nie jej IP.
Gdy trzeba trafić na konkretny adres serwera, zachowując nazwę, użyj curl --resolve example.com:443:203.0.113.10 https://example.com/. curl połączy się z podanym adresem, ale wyśle example.com w SNI i w nagłówku Host.
Jak zobaczyć, jaki certyfikat zwraca nazwa
Polecenie openssl s_client -connect example.com:443 -servername example.com jawnie ustawia wartość SNI i wypisuje certyfikat wybrany przez serwer. Porównaj nazwy w certyfikacie z nazwą strony: musi ona być w polu subject lub na liście nazw alternatywnych. Wzorzec *.example.com obejmuje shop.example.com, ale nie sam example.com i nie a.shop.example.com. Jeśli zły certyfikat pojawia się tylko podczas pracy przez proxy, otwórz stronę błędów certyfikatu.
Pytania i odpowiedzi (FAQ)
Czy można ukryć SNI?
Nowy standard ECH szyfruje to pole, ale obsługuje go daleko nie każda strona i przeglądarka.
Co widzi proxy w połączeniu HTTPS?
Nazwę strony, czas i ilość danych. Adresy podstron i treść pozostają zaszyfrowane.
Powiązane pojęcia
Rezydencjalne $1.59, mobilne $2.50, serwerowe $0.65 za 1 GB
Rejestracja w minutę, dostęp od razu po płatności.