[Интервью·Сеть] TCP/IP (6): Введение в HTTP и HTTPS

сервер HTTPS HTTP опрос

Эта статья является последней статьей, которая обобщает сетевую часть процесса подготовки к собеседованию и в основном знакомит со следующими знаниями:

  • Обзор протокола HTTP
  • POST-запросы и GET-запросы
  • Файлы cookie и сеансы
  • Шифрование при передаче данных
  • Введение в HTTPS

HTTP-протокол

В семиуровневой модели OSI протокол HTTP находится на самом верхнем прикладном уровне. Доступ к веб-страницам через браузер напрямую использует протокол HTTP. При использовании протокола HTTP клиент сначала устанавливает TCP-соединение с 80-м портом сервера, а затем выполняет запросы и ответы на основе этого соединения, а также обмен данными.

HTTP 工作原理

Есть две широко используемые версии HTTP, 1.0 и 1.1. Основное отличие состоит в том, что в HTTP 1.0 для каждого запроса и ответа использовалось новое TCP-соединение, тогда как, начиная с HTTP 1.1, несколько команд и ответов отправляются по одному TCP-соединению. Таким образом, количество установленных и разъединенных TCP-соединений значительно сокращается, а эффективность повышается.

Веб-страницы, загружаемые по протоколу HTTP, обычно описываются на языке HTML, поэтому HTML также можно понимать как формат данных веб-страниц. HTML — это фрагмент простого текста, который может определять текст, изображения, аудио- и видеоизображения, ссылки и их цвета, положения и т. д. на веб-странице. Независимо от базовой структуры компьютера и от того, какие протоколы используются в нижней части сети, эффект, отображаемый HTML, в основном одинаков. С этой точки зрения HTML находится на уровне представления семиуровневой модели OSI.

POST-запросы и GET-запросы

HTTP имеет восемь запросов (также называемых методами), наиболее распространенными из которых являются запросы GET и запросы POST.

Запросы GET обычно используются для запроса и получения данных, а запросы POST используются для отправки данных.Помимо разницы в использовании, они имеют следующие отличия:

  1. Запросы GET можно кэшировать и добавлять в закладки, но не POST.
  2. Запросы GET остаются в истории браузера, а POST — нет.
  3. Длина GET-запроса ограничена (разные браузеры разные, около нескольких Кб), тип данных URL-адреса может быть только символами ASCII, а POST-запрос не имеет ограничений.
  4. Параметры запроса GET находятся в URL-адресе, поэтому запросы GET никогда не должны использоваться для передачи конфиденциальных данных. Данные POST-запроса записываются в заголовок HTTP-запроса, а безопасность немного выше, чем у GET-запроса.

Уведомление:

  POST 请求仅比 GET 请求略安全一点,它的数据不在 URL 中,但依然以明文的形式存放于 HTTP 的请求头中。

Файлы cookie и сеансы

HTTP — это соединение без сохранения состояния, каждый раз, когда клиент читает веб-страницу, сервер считает это новой сессией. Но иногда нам нужно сохранить некоторую информацию, такую ​​как имя пользователя и пароль при входе в систему, информацию о последнем подключении пользователя и т. д. Эта информация сохраняется в файлах cookie и сессиях.

Принципиальное различие между ними заключается в том, что файл cookie хранится на клиенте, а сеанс — на сервере. Из этого мы также можем сделать следующие выводы:

  1. Cookie относительно небезопасно, браузер может проанализировать локальные файлы cookie для подделки cookie.
  2. Можно установить тайм-аут сеанса, после сбоя в течение этого времени, во избежание долговременного занятия памяти сервера.
  3. Существует ограничение на размер одного файла cookie (4 КБ) и общее ограничение на количество файлов cookie на сайте (20).
  4. Клиент каждый раз отправляет файл cookie на сервер, поэтому сервер может знать файл cookie, но клиент не знает сеанс.

Когда сервер получает файл cookie, он находит сеанс клиента на основе идентификатора сеанса в файле cookie. Если нет, новый SessionID будет сгенерирован и отправлен клиенту.

шифрование

Существует два типа шифрования: симметричное шифрование и асимметричное шифрование. Прежде чем объяснять их значение, давайте взглянем на простой процесс шифрования и дешифрования:

加密和解密过程

Так называемый симметричный означает, что ключ шифрования и ключ дешифрования одинаковы, а асимметричный, естественно, означает, что они разные.

Возьмем пример симметричного шифрования. Предположим, что алгоритм шифрования здесь — сложение, а алгоритм дешифрования — вычитание. Если данные открытого текста равны 10, а секретный ключ равен 1, то зашифрованные данные10 + 1 = 11, если получатель не знает секретный ключ, он не знает, сколько шифротекста 11 следует вычесть. И наоборот, если получатель знает, что ключ равен 1, он может передать11 - 1 = 10Вычислить открытые текстовые данные.

Распространенным алгоритмом асимметричного шифрования является алгоритм RSA, который в основном использует идею «легко умножить два простых числа, но сложно разложить произведение на два простых числа». Его конкретный принцип выходит за рамки этой статьи, и заинтересованные читатели могут ознакомиться со справочной статьей в конце статьи.

При асимметричном шифровании данные, зашифрованные с помощью открытого ключа, могут быть расшифрованы только с помощью закрытого ключа, а данные, зашифрованные с помощью закрытого ключа, могут быть расшифрованы только с помощью открытого ключа.

Преимущество симметричного шифрования заключается в том, что оно быстрое, но если предположить, что секретный ключ хранится на сервере, то как безопасно позволить клиенту получить секретный ключ — это проблема, которую необходимо решить. Поэтому при реальной сетевой передаче обычно используется комбинация симметричного и асимметричного шифрования, и сервер отправляет симметричный ключ клиенту посредством асимметричного шифрования. Затем обе стороны используют этот симметричный ключ для связи.

HTTPS

Мы знаем, что протокол HTTP напрямую использует протокол TCP для передачи данных. Поскольку данные не шифруются и передаются напрямую в виде открытого текста, существуют следующие три риска:

  1. Риск прослушивания: сторонние узлы могут узнать содержание сообщения.
  2. Риск подделки: Сторонние узлы могут изменить содержимое сообщения.
  3. Риск олицетворения: сторонние узлы могут выдавать себя за других, чтобы участвовать в общении.

Например, когда вы открываете веб-страницу в приложении на своем мобильном телефоне, иногда вы видите всплывающую рекламу в нижней части веб-страницы, что на самом деле означает, что ваш HTTP-контент был перехвачен и подделан.

Протокол HTTPS предназначен для устранения трех вышеуказанных рисков, поэтому он может:

  1. Убедитесь, что вся информация зашифрована и передается и не может быть украдена третьими лицами.
  2. Добавьте к информации механизм проверки, если она будет злонамеренно повреждена третьей стороной, ее можно будет обнаружить.
  3. Оснащен сертификатом удостоверения личности, чтобы предотвратить участие третьих лиц в обмене данными.

Структура HTTPS показана на рисунке:

HTTPS 协议

Видно, что он просто добавляет слой шифрования TLS/SSL между HTTP и TCP, что также подтверждает известную поговорку: «Все проблемы с компьютером можно решить, добавив промежуточный слой».

При использовании HTTPS сервер отправляет клиенту собственный сертификат, содержащий открытый ключ сервера. Процесс передачи на основе асимметричного шифрования выглядит следующим образом:

  1. Клиент использует открытый ключ для шифрования информации, а зашифрованный текст отправляется на сервер.
  2. Сервер расшифровывает с помощью собственного закрытого ключа, а затем шифрует возвращенные данные с помощью закрытого ключа и отправляет их обратно клиенту.
  3. Клиент расшифровывает с открытым ключом

Сертификат здесь является инструментом для сервера, чтобы подтвердить свою личность, и он выдается заявителю авторитетным центром сертификации (ЦС). Если сертификат поддельный или выдан самому себе, сервер не распознает сертификат и выдаст предупреждение:

12306 的自签名证书

Кратко расскажите, как протокол HTTPS позволяет избежать трех рисков, упомянутых выше:

  1. Сначала используйте асимметричное шифрование для передачи пароля, а затем используйте этот пароль для симметричного шифрования данных, чтобы третья сторона не могла получить содержимое сообщения.
  2. Отправитель записывает результат хеширования данных в данные, а получатель расшифровывает и сравнивает результат хеширования данных.Если он несовместим, это означает, что он был изменен. Поскольку передаваемые данные зашифрованы, третьи стороны не могут изменить результат хэширования.
  3. Сертификаты выдаются авторитетной организацией в сочетании с механизмом проверки сертификатов, чтобы предотвратить маскировку третьих лиц при общении.

Справочная статья

  1. Научно-популярные посты HTTPS
  2. Обзор механизма работы протокола SSL/TLS
  3. Шифрование RSA
  4. Методы HTTP: GET против POST