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.

Rezydencjalne $1.59, mobilne $2.50, serwerowe $0.65 za 1 GB

Rejestracja w minutę, dostęp od razu po płatności.

Utwórz konto