Коли ви отримаєте
https://encrypted.google.com/search?q=%s
%s
Запит шифрується? Або просто відповідь? Якщо це не так, то чому Google повинен також публікувати контент загальнодоступним разом із шифруванням?
Коли ви отримаєте
https://encrypted.google.com/search?q=%s
%s
Запит шифрується? Або просто відповідь? Якщо це не так, то чому Google повинен також публікувати контент загальнодоступним разом із шифруванням?
Відповіді:
Весь запит шифрується, включаючи URL-адресу і навіть команду (GET
). Єдине, на що може потрапити сторона, що втручається, наприклад проксі-сервер, - адреса призначення та порт.
Однак зауважте, що пакет «Привіт клієнта рукостискання TLS» може рекламувати повністю кваліфіковане доменне ім’я в простому тексті за допомогою розширення SNI (спасибі @hafichuk), яке використовується всіма сучасними основними браузерами, хоча деякі лише на нових ОС.
EDIT: (Оскільки це щойно отримало мені знак "Good Answer", я думаю, я повинен відповісти на все питання ...)
Вся відповідь також зашифрована; проксі-сервери не можуть перехопити будь-яку його частину.
Google обслуговує пошукові запити та інший вміст через https, оскільки не всі вони є загальнодоступними, а також ви можете заховати частину загальнодоступного вмісту з MITM . У будь-якому випадку, краще дозволити Google відповісти самі .
Сама URL-адреса зашифрована, тому параметри в рядку запиту не пересуваються просто через провід.
Однак майте на увазі, що URL-адреси, включаючи дані GET, часто реєструються веб-сервером, тоді як дані POST рідко є. Тож якщо ви плануєте зробити щось на кшталт /login/?username=john&password=doe
, тоді не робіть цього; використовувати замість POST.
HTTPS Встановлює базове конекцію SSL перед передачею будь-яких даних HTTP. Це гарантує, що всі дані URL-адреси (за винятком імені хоста, яке використовується для встановлення з'єднання), переносяться виключно в рамках цього зашифрованого з'єднання і захищаються від атаки "людина-в-середині" так само, як і будь-які дані HTTPS.
Сказане є частиною ДУЖЕ вичерпної відповіді з відповідей Google, розміщених тут:
http://answers.google.com/answers/threadview/id/758002.html#answer
Частина URL-адреси після імені хоста надійно надіслана.
Наприклад, https://somewhere.com/index.php?NAME=FIELD
/index.php?NAME=FIELD
Частина шифрується. Не somewhere.com
є.
Все зашифровано, але вам потрібно пам’ятати, що ваш запит залишатиметься в журналах сервера та буде доступний різним аналізаторам журналів тощо (що зазвичай не відповідає запиту POST).
Так, це безпечно. SSL шифрує все.
Витяг із запиту POST:
POST /foo HTTP/1.1
... some other headers
Витяг із запиту GET:
GET /foo?a=b HTTP/1.1
... some other headers
В обох випадках все, що надсилається в сокет, шифрується. Те, що клієнт бачить параметри у своєму браузері під час GET-запиту, не означає, що чоловік у середині побачив би те саме.
Я просто підключився через HTTPS до веб-сайту і передав купу параметрів GET. Тоді я використовував дротик, щоб нюхати мережу. Використовуючи HTTP, URL надсилається незашифрованим, це означає, що я легко бачу всі параметри GET в URL-адресі. За допомогою HTTPS все зашифровано, і я навіть не можу побачити, який пакет є командою GET, не кажучи вже про його вміст!
SSL відбувається перед розбором заголовка, це означає:
Client creates Request
Request gets encrypted
Encrypted request gets transmitted to the Server
Server decrypts the Request
Request gets parsed
Запит виглядає приблизно так (не можу згадати точний синтаксис, але це має бути досить близько):
GET /search?q=qwerty HTTP/1.1
Host: www.google.de
Тому також проблематично мати різні сертифікати SSL для декількох хостів одного і того ж IP, запитуване ім'я хоста не відомо до розшифровки.
HTTP/1.1
Набирає чинності по закінченні першого рядка.
Запит GET шифрується під час використання HTTPS - адже саме тому захищені веб-сайти повинні мати унікальну IP-адресу - немає жодного способу отримати призначене ім'я хоста (або віртуальний каталог) від запиту до його розшифровки.