Когда вы GET
https://encrypted.google.com/search?q=%s
Запрос %s
зашифрован? Или просто ответ?
Если это не так, почему Google должен обслуживать его публичным контентом также с помощью шифрования?
Когда вы GET
https://encrypted.google.com/search?q=%s
Запрос %s
зашифрован? Или просто ответ?
Если это не так, почему Google должен обслуживать его публичным контентом также с помощью шифрования?
Весь запрос зашифрован, включая URL-адрес и даже команду (GET
). Единственное, что может быть промежуточным участником, например прокси-сервером, - это адрес назначения и порт.
Обратите внимание, однако, что пакет Hello Hello из рукопожатия TLS может рекламировать полное доменное имя в открытом тексте через расширение SNI (спасибо @hafichuk), который используется всеми современными браузерами, хотя некоторые из них относятся только к более новым ОС.
РЕДАКТИРОВАТЬ: (так как это только что достало мне значок "Хороший ответ", я думаю, я должен ответить на весь вопрос...)
Весь ответ также зашифрован; прокси не могут перехватывать какую-либо его часть.
Google выполняет поиск и другой контент по https, потому что не все из них общедоступны, и вы также можете скрыть часть общедоступного контента из MITM. В любом случае лучше всего дать ответ .
Сам URL-адрес зашифрован, поэтому параметры в строке запроса не перемещаются в обычном порядке.
Однако имейте в виду, что URL-адреса, включая данные GET, часто регистрируются веб-сервером, тогда как данные POST редко бывают. Поэтому, если вы планируете сделать что-то вроде /login/?username=john&password=doe
, тогда не делайте этого; вместо этого используйте POST.
HTTPS Устанавливает базовую SSL-связь, прежде чем любые данные HTTP будут переданы. Это гарантирует, что все данные URL (за исключением имя хоста, которое используется для установления соединения) переносится исключительно в этом зашифрованном соединении и защищена от man-in-the-middle, так же, как любые HTTPS-данные.
Вышесказанное является частью ОЧЕНЬ всестороннего ответа от Google Answers, расположенного здесь:
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 выполняется перед анализом заголовка, это означает:
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-адресе является проблематичным, запрошенное имя хоста неизвестно до дешифрования.
Да, это безопасно. SSL шифрует все.
Отрывок из запроса POST:
POST /foo HTTP/1.1
... some other headers
Выдержка из запроса GET:
GET /foo?a=b HTTP/1.1
... some other headers
В обоих случаях все, что отправлено в сокете, зашифровано. Тот факт, что клиент видит параметры в своем браузере во время запроса GET, не означает, что человек в середине будет видеть то же самое.
Я просто подключился через HTTPS к веб-сайту и передал кучу параметров GET. Затем я использовал wirehark, чтобы обнюхать сеть. Используя HTTP, URL-адрес отправляется незашифрованным, что означает, что я могу легко увидеть все параметры GET в URL-адресе. Используя HTTPS, все зашифровано, и я даже не вижу, какой пакет является командой GET, не говоря уже о ее содержимом!
Запрос GET зашифровывается при использовании HTTPS - на самом деле именно поэтому защищенные веб-сайты должны иметь уникальный IP-адрес - нет способа получить требуемое имя хоста (или виртуального каталога) из запроса до его дешифрования.