Подробное объяснение протокола HTTPS серии "Большие интерфейсы расширенной безопасности" (легко понять)

внешний интерфейс

предисловие

Кодирование должно быть профессией на всю жизнь, а не просто 30-летней едой
Эта статья была включенаGitHub https://github.com/ponkans/F2E, добро пожаловать, звезда, продолжайте обновлять

Многие статьи в Интернете объясняют HTTPS.туманный, после прочтения этого, если вы все еще не понимаете, вы можете просто добавить странный WeChat и назвать меня отморозком (пожалуйста, спрашивайте много деталей)Муравей ФинансовыйБудь надежным другом)~

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


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

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

Why HTTPS

В последние годы крупные компании активно продвигают построение HTTPS. Google Chrome помечает веб-сайты, не поддерживающие HTTPS, как «небезопасные», Apple требует, чтобы HTTPS использовался для связи в APP, а апплет WeChat также требует использования протокола HTTPS. Так почему мы должны делать такие вещи?

Давайте сначала посмотрим на HTTP. HTTP (протокол передачи гипертекста) — это протокол прикладного уровня для распределенных, совместных и гипермедиа информационных систем.Можно сказать, что HTTP является основой современной интернет-коммуникации.

Однако у HTTP есть фатальный недостаток, то есть содержимоепередача открытого текста, без какого-либо шифрования, и эти данные открытого текста будутWiFi, роутер, оператор, компьютерный залОжидание нескольких узлов физического устройства, если какой-либо узел в середине отслеживается, содержимое передачи будет полностью раскрыто.Этот метод атаки называется MITM (человек посередине).посредникатака.

Пример, немного длинный, но этот пример показывает, почему я так одержим безопасностью~~

Это можно сравнить с передачей конспектов в классе, когда вы были ребенком: вы сидите в классе у стены и хотите произнести предложение."Я буду ждать тебя на детской площадке после школы ночью"К Сяохуну, сидящему у окна, проходят шесть или семь человек. Хотя вы сложили записку пополам, джентльмен не злодей, и каждый в середине может легко открыть записку и увидеть, что вы хотите сказать.

Это просто нормально видеть, есть ли Сяоган, которому также нравится Сяохун, и видя, что вы двое скоро отправитесь домой, я чувствую нежелание, поэтому я изменил примечание и изменил его на"Иди домой после школы ночью, я иду в интернет-кафе играть в игры".

Сяохун очень расстроилась, когда увидела, что ты собираешься бросить ее, чтобы играть в игры одна, и начала задавать вопросы по записке."Мы договорились пойти домой вместе, зачем мы будем играть в игры, а".

На обратном пути от записки Сяохуна Сяоган снова изменил записку.«Иди играй в свою игру, я иду домой с Сяоганом».

Итак, и вы, и Сяохун очень грустны, Сяоган завоевал любовь ножом, а вы в растерянности.


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

运营商劫持
угон авианосца

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

Чтобы решить проблемы с безопасностью, которые может вызвать передача данных открытого текста HTTP, в 1994 году Netscape предложила безопасный протокол передачи гипертекста HTTPS (протокол передачи гипертекста).Зашифрованные пакеты SSL/TLS.

Принцип реализации HTTPS

Как упоминалось ранее, HTTPS на самом деле представляет собой передачу HTTP-пакетов, зашифрованных с помощью SSL/TLS, так что же такое SSL/TLS?

Протоколы безопасности транспортного уровня SSL (Secure Sockets Layer) и TLS (Transport Layer Security) на самом деленабор вещей.

Когда Netscape предложила протокол HTTPS в 1994 году, он использовал SSL для шифрования. Позже Инженерная рабочая группа Интернета IETF (Целевая инженерная группа Интернета) дополнительно стандартизировала SSL и опубликовала первую версию документа протокола TLS TLS 1.0 в 1999 году. Последней версией протокола TLS является TLS 1.3, анонсированная в 2018 году.

процесс работы

Давайте сначала посмотрим на процесс шифрования и дешифрования HTTPS.

HTTPS加解密流程
Процесс шифрования и дешифрования HTTPS
  1. Пользователь инициирует HTTPS-запрос в браузере (например,juejin.cn), подключение по умолчанию осуществляется через порт 443 сервера;
  2. HTTPS требует использования наборацифровой сертификат ЦС, сертификат будет сопровождатьсяПубличный ключ, и соответствующийЗакрытый ключЗакрытыйДержите его закрытым на стороне сервера;
  3. Сервер получает запрос и возвращает настроенный контентПубличный ключсертификат клиенту;
  4. клиент получаетСертификат, проверьте действительность, в основном в том числе, находится ли она в пределах срока действия, соответствует ли доменное имя сертификата запрошенному доменному имени, является ли сертификат верхнего уровня действительным (рекурсивное суждение, до тех пор, пока корневой сертификат не будет встроен в систему или настроен оценивается браузером), если нет Если пройдено, отобразить предупреждающее сообщение HTTPS, если пройдено, продолжить;
  5. Клиент генерирует симметричное шифрованиеслучайный ключ, и используйтеПубличный ключЗашифровать и отправить на сервер;
  6. сервер получаетслучайный ключшифрованный текст, используяПубличный ключпарныйЗакрытый ключЗакрытыйРасшифруйте, чтобы получить то, что клиент действительно хочет отправитьслучайный ключ;
  7. Сервер использует данные, отправленные клиентомслучайный ключСимметрично шифровать передаваемые данные HTTP и возвращать зашифрованный текст клиенту;
  8. Использование клиентаслучайный ключСимметрично расшифровать зашифрованный текст, чтобы получить открытый текст данных HTTP;
  9. Последующие HTTPS-запросы используют ранее обмененныйслучайный ключВыполнять симметричное шифрование и дешифрование.

Симметричное и асимметричное шифрование

Это и симметричное шифрование, и асимметричное шифрование.Есть открытый ключ, закрытый ключ и случайный ключ.Почему так сложно?Плохо ли делать один набор?

Симметричное шифрование означает, что существует ключ, который можно использовать для шифрования части открытого текста, и после шифрования только этот ключ можно использовать для расшифровки открытого текста. Если обе стороны общения владеют ключом, и Бог знает, что ты знаешь меня, и никто другой не знает, то безопасность общения, естественно, может быть гарантирована (вКлюч достаточно сильныйв случае).

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

На данный момент нам нужен еще один магический тип шифрования, асимметричное шифрование.

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

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

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

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

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

  1. Сервер имеет открытый ключ асимметричного шифрования A1 и закрытый ключ A2;
  2. У клиента есть открытый ключ асимметричного шифрования B1 и закрытый ключ B2;
  3. Клиент инициирует запрос к серверу, и сервер возвращает открытый ключ A1 клиенту;
  4. Браузер получает открытый ключ A1 и отправляет сохраненный открытый ключ B1 на сервер;
  5. После этого все данные, отправляемые сервером клиенту, шифруются открытым ключом B1, а клиент может их расшифровать закрытым ключом B2;
  6. Все данные, отправляемые клиентом на сервер, шифруются с помощью открытого ключа A1, а сервер может расшифровать их с помощью закрытого ключа A2.

В настоящее время данные в обоих направлениях передачи асимметрично зашифрованы для обеспечения безопасности, так почему бы не использовать эту схему?

Основная причинаАсимметричное шифрование и дешифрование занимает гораздо больше времени, чем симметричное шифрование и дешифрование., имеет большую потерю производительности, и у всех очень плохой опыт.

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

  1. Сервер имеет открытый ключ асимметричного шифрования A1 и закрытый ключ A2;
  2. Клиент инициирует запрос, и сервер возвращает открытый ключ A1 клиенту;
  3. Клиент случайным образом генерирует симметричный зашифрованный ключ K, шифрует его открытым ключом A1 и отправляет на сервер;
  4. Получив зашифрованный текст, сервер расшифровывает его собственным закрытым ключом A2 и получает симметричный ключ K. В это время завершается безопасный обмен симметричным ключом, что решает проблему кражи передачи ключа при симметричном шифровании.
  5. После этого обе стороны используют ключ K для симметричного шифрования и дешифрования.

Это похоже на идеальное решение,примите во вниманиебезопасность и производительность, но действительно ли это безопасно?

Центр сертификации

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

Когда сервер возвращает открытый ключ A1 клиенту, посредникзаменятьОн отправляется в браузер как собственный открытый ключ B1.

И браузер в это время ничего не знает, по глупости использует открытый ключ B1 для шифрования ключа K и отправляет его,перехват человека посередине, посредник расшифровывает своим закрытым ключом B2, получает ключ K, а затем шифрует его открытым ключом сервера A1 и передает его серверу, завершая коммуникационную связь, причем сервер и клиент не знают.

HTTPS中间人
HTTPS «человек посередине»

Основная причина этой проблемы заключается в том, чтоКлиент не может подтвердить, действительно ли полученный открытый ключ отправлен сервером. Чтобы решить эту проблему, в Интернете было введено общественное агентство доверия, которым является CA.

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

Однако, если посредник также немного умнее,Была изменена только часть открытого ключа сертификата, клиент по-прежнему не может подтвердить сертификатБыл ли он подделан, то нам нужна технология защиты от подделок.

Как упоминалось ранее, в асимметричном шифровании общий открытый ключ используется для шифрования, а закрытый ключ используется для дешифрования.Хотя шифрование с закрытым ключом теоретически осуществимо, оно не подходит из-за математической конструкции, поэтому закрытый ключ имеет только функция расшифровки Что?

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

  1. CA имеет собственную пару открытых и закрытых ключей.
  2. ЦС хэширует информацию открытого текста сертификата при выдаче сертификата.
  3. Хэш-значение с закрытым ключомдобавить подпись, получить цифровую подпись
Данные открытого текста и цифровая подпись образуют сертификат, который передается клиенту.
  1. Клиент получает сертификат и разбивает его на текстовую часть Текст и цифровую подпись Sig1
  2. Используйте открытый ключ центра сертификациинеподписанный, получить Sig2 (поскольку агентство ЦС является общедоступным доверенным лицом, информация о сертификате и открытом ключе агентства ЦС будет встроена в систему или браузер)
  3. Хэшируйте текстовую часть открытого текста с помощью алгоритма хеширования, объявленного в сертификате, чтобы получить T
  4. Когда значение хеш-функции H, рассчитанное самостоятельно, совпадает снеподписанныйСообщение Sig2равный, указывающий, что сертификат является доверенным,не испорченный

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

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

В этом процессе сертификат и открытый ключ агентства ЦС, встроенные в систему или браузер, становятся важным звеном, которое также является доказательством общедоступной доверительной идентичности агентства ЦС.Если в системе или браузере такого агентства ЦС нет, то клиент не может принять сертификат, возвращенный сервером, и отобразить предупреждение HTTPS.

По сути, сертификат агентства CA представляет собой цепочку доверия, A доверяет B, B доверяет C и так далее.Сертификат НаггетсНапример, Nuggets подает заявку на получение сертификата от RapidSSL, а удостоверение центра сертификации RapidSSL сертифицируется корневым центром сертификации DigiCert Global, образуя цепочку доверия.

Закрытые ключи агентств УЦ всех уровней являются абсолютно частной информацией, и в случае утечки секретных ключей агентств УЦ доверие к ним будет катастрофическим. несколько раз доУтечка закрытого ключа ЦС, вызывая кризис доверия, основные системы и браузеры могут отозвать только встроенный корневой сертификат соответствующего ЦС.

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

证书明细
Сведения о сертификате

Суммировать

Эта статья была включенаGithub https://github.com/ponkans/F2E, добро пожаловать, Звезда, продолжайте обновлять💧

Отправной точкой HTTPS является решение проблемы подделки информации и мониторинга при передаче открытого текста HTTP.

  • Чтобы учесть как производительность, так и безопасность, используется схема асимметричное шифрование + симметричное шифрование.
  • Чтобы гарантировать, что передача открытого ключа не будет подделана, используется функция несимметричной зашифрованной цифровой подписи для обеспечения достоверности сертификата HTTPS с механизмом организации CA и корневым сертификатом системы.

Недавние оригинальные статьи передают дверь, Biubiubiu:


Если вам это нравится, добавьте подписку, поставьте лайк, спасибо 💕😊

Свяжитесь со мной / публичный аккаунт

Поиск в WeChat【водяной монстр] Или отсканируйте QR-код ниже, чтобы ответить на «Добавить группу», я приглашу вас в группу технического обмена. Честно говоря, в этой группе, даже если вы не говорите, просто чтение записей чата — это своего рода рост. (Али технический эксперт, автор Ao Bing, Java3y, старший клиент Mogujie, эксперт по безопасности Ant Financial, там все большие коровы).

Водяной монстр также будет регулярно создавать оригиналы, регулярно обмениваться опытом с друзьями или помогать читать резюме. Будьте внимательнее, не теряйтесь, есть возможность побегать вместе 🏃↓↓↓