SNI
SNI — поле на початку HTTPS-з'єднання, в якому програма повідомляє ім'я сайту, до якого підключається.
Оновлено · Редакція Prokso
На одній IP-адресі сервера можуть працювати сотні сайтів. Щоб сервер знав, який сертифікат показати, програма ще до шифрування передає ім'я сайту — це і є SNI.
Поле SNI зазвичай не зашифроване. Тому навіть без доступу до вмісту мережа й проксі бачать, на який сайт ви йдете, — але не адреси сторінок і не дані.
Саме так проксі-сервіс може вести облік доменів, не знаючи, що відбувається всередині з'єднання. Детальніше про шифрування — у статті TLS.
У Prokso вміст і адреси сторінок, паролі не зберігаються; для розгляду скарг зберігаються лише домени, час і обсяг — 90 днів.
Де саме в з'єднанні міститься SNI
SNI — це розширення повідомлення ClientHello, першого пакета рукостискання TLS. Поле називається server_name і містить ім'я хоста, наприклад example.com, без шляху і без порту. Сервер читає його й обирає сертифікат ще до того, як узгоджено ключі.
Через HTTP-проксі ім'я сайту з'являється двічі: спершу в рядку CONNECT example.com:443 для тунелю, потім у SNI всередині тунелю. Проксі читає лише перше, друге йде до сайту як є. Зазвичай обидва імені збігаються.
Чому з'єднання за IP-адресою ламає HTTPS
Стандарт дозволяє в SNI лише ім'я хоста, а не IP-адресу. Якщо програма відкриває https://203.0.113.10/, вона не надсилає імені, і сервер з багатьма сайтами повертає сертифікат за замовчуванням. Результат — помилка невідповідності імені, хоча сам сайт працює. Тому в налаштуваннях програм і скриптів вказуйте ім'я сайту, а не його IP.
Коли потрібно потрапити на конкретну адресу сервера, зберігши ім'я, використайте curl --resolve example.com:443:203.0.113.10 https://example.com/. curl з'єднається з указаною адресою, але надішле example.com у SNI та в заголовку Host.
Як побачити, який сертифікат повертає ім'я
Команда openssl s_client -connect example.com:443 -servername example.com явно задає значення SNI і виводить сертифікат, який обрав сервер. Порівняйте імена в сертифікаті з іменем сайту: воно має бути в полі subject або в списку альтернативних імен. Шаблон *.example.com покриває shop.example.com, але не сам example.com і не a.shop.example.com. Якщо неправильний сертифікат з'являється лише під час роботи через проксі, відкрийте сторінку помилки сертифіката.
Питання й відповіді
Чи можна приховати SNI?
Новий стандарт ECH шифрує це поле, але його підтримують далеко не всі сайти й браузери.
Що бачить проксі в HTTPS-з'єднанні?
Ім'я сайту, час і обсяг даних. Адреси сторінок і вміст залишаються зашифрованими.
Пов'язані терміни
Резидентські $1.59, мобільні $2.50, серверні $0.65 за 1 ГБ
Реєстрація за хвилину, доступи одразу після оплати.