Эта статья была написана членом командыЦзун ВэйЕму разрешено исключительное использование Tuya Front-end, включая, помимо прочего, редактирование, пометку оригинальности и другие права.
предисловие
Многие статьи в Интернете объясняют HTTPS.туманный, после прочтения этого, если вы все еще не понимаете, вы можете просто добавить странный WeChat и назвать меня отморозком (пожалуйста, спрашивайте много деталей)Муравей ФинансовыйБудь надежным другом)~
Эволюция и процесс всего HTTPSразмышление, есть много идей, на которых можно поучиться. Я собираюсь держаться подальше от своих безопасных друзей
Каждая статья надеется, что вы можете что-то получить, эта поможет вамУглубить HTTPS, добавив Cormented Prime, я надеюсь получить следующие результаты после прочтения:
- Понять, что именно решает 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-запрос в браузере (например,juejin.im/), подключение по умолчанию осуществляется через порт 443 сервера;
- HTTPS требует использования набораCA Цифровой сертификат, сертификат будет сопровождатьсяПубличный ключ, и соответствующийЗакрытый ключЗакрытыйДержите его закрытым на стороне сервера;
- Сервер получает запрос и возвращает настроенный контентПубличный ключсертификат клиенту;
- клиент получаетСертификат, проверьте действительность, в основном в том числе, находится ли она в пределах срока действия, соответствует ли доменное имя сертификата запрошенному доменному имени, является ли действительным сертификат верхнего уровня (рекурсивное суждение, пока корневой сертификат не встроен в систему или не настроен оценивается браузером), если нет Если пройдено, отобразить предупреждающее сообщение HTTPS, если пройдено, продолжить;
- Клиент генерирует симметричное шифрованиеслучайный ключ, и используйтеПубличный ключЗашифровать и отправить на сервер;
- сервер получаетслучайный ключшифрованный текст, используяПубличный ключпарныйЗакрытый ключЗакрытыйРасшифруйте, чтобы получить то, что клиент действительно хочет отправитьслучайный ключ;
- Сервер использует данные, отправленные клиентомслучайный ключСимметрично шифровать передаваемые данные HTTP и возвращать зашифрованный текст клиенту;
- Использование клиентаслучайный ключСимметрично расшифровать зашифрованный текст, чтобы получить открытый текст данных HTTP;
- Последующие HTTPS-запросы используют ранее обмененныйслучайный ключВыполнять симметричное шифрование и дешифрование.
Симметричное и асимметричное шифрование
Это симметричное шифрование и асимметричное шифрование, открытый ключ для закрытого ключа будет случайным ключом, почему должно быть настолько сложно, изложено в конце плохое, почему?
Симметричное шифрование означает, что существует ключ, который можно использовать для шифрования части открытого текста, и после шифрования только этот ключ может использоваться для расшифровки открытого текста. Если обе стороны общения владеют ключом, и Бог знает, что ты знаешь меня, и никто другой не знает, то безопасность общения, естественно, может быть гарантирована (вКлюч достаточно сильныйв случае).
Однако в сценарии передачи HTTPS сервер заранее не знает, кто является клиентом, и вы такжеНевозможно спокойно согласовать ключ связи с администратором каждого сайта без предварительного выхода в интернет.Аут, то должен быть процесс передачи ключа в интернете, если во время передачи прослушивается кто-то другой, то все последующие шифровки бесполезны.
На данный момент нам нужен еще один магический тип шифрования, асимметричное шифрование.
Асимметричное шифрование имеет два ключа, один из которых является открытым, а другой — закрытым. Вообще говоря, открытый ключ используется для шифрования, а зашифрованный текст может быть расшифрован только с помощью закрытого ключа.
Затем, когда клиент инициирует запрос на соединение, сервер передает открытый ключ, клиент использует открытый ключ для шифрования информации, а затем отправляет зашифрованный текст на сервер, а сервер имеет закрытый ключ для расшифровки.
Однако, когда сервер хочет вернуть данные, если они зашифрованы с помощью открытого ключа, у клиента нет закрытого ключа для их расшифровки, а если они зашифрованы с помощью закрытого ключа, хотя у клиента есть открытый ключ для расшифровки это, открытый ключ находится впередается через Интернет, очень вероятно, что кто-то уже получил его, и это небезопасно, поэтому этот процесс не может быть удовлетворен только асимметричным шифрованием.
Примечание. И закрытый ключ Способность отличается, не взаимозаменяемы в реальном использовании. Функция подписи также полезна для HTTPS лет, она будет объяснена ниже.
Только один набор приватных открытых ключей может гарантировать только одностороннее сглаживание, тогда, если мы подготовимДва набора открытых и закрытых ключейНу можно ли решить эту проблему? Посмотрите на процесс ниже.
- Сервер имеет открытый ключ асимметричного шифрования A1 и закрытый ключ A2;
- У клиента есть открытый ключ асимметричного шифрования B1 и закрытый ключ B2;
- Клиент инициирует запрос на сервер, и сервер возвращает открытый ключ A1 к клиенту;
- Браузер получает открытый ключ A1 и отправляет открытый ключ B1, он сохранился на сервере;
- После этого все данные, отправляемые сервером клиенту, шифруются открытым ключом B1, а клиент может их расшифровать закрытым ключом B2;
- Все данные, отправляемые клиентом на сервер, шифруются с помощью открытого ключа A1, а сервер может расшифровать их с помощью закрытого ключа A2.
В настоящее время данные в обоих направлениях передачи асимметрично зашифрованы для обеспечения безопасности, так почему бы не использовать эту схему?
Основная причинаАсимметричное шифрование и дешифрование занимает гораздо больше времени, чем симметричное шифрование и дешифрование., имеет большую потерю производительности, и у всех очень плохой опыт.
Таким образом, мы, наконец, решили ввести асимметричное шифрование + симметричную схему шифрования, описанную выше, а затем просмотрите ↓↓↓
- Сервер имеет открытый ключ асимметричного шифрования A1 и закрытый ключ A2;
- Клиент инициирует запрос, и сервер возвращает открытый ключ A1 клиенту;
- Клиент случайным образом генерирует симметричный зашифрованный ключ K, шифрует его открытым ключом A1 и отправляет на сервер;
- Получив зашифрованный текст, сервер расшифровывает его собственным закрытым ключом A2 и получает симметричный ключ K. В это время завершается безопасный обмен симметричным ключом, что решает проблему кражи передачи ключа при симметричном шифровании.
- После этого обе стороны используют ключ K для симметричного шифрования и дешифрования.
Это похоже на идеальное решение,примите во вниманиебезопасность и производительность, но действительно ли это безопасно?
Центр сертификации
все еще рассматриваюатака «человек посередине»В случае асимметричного шифрования алгоритмпубличныйДа, каждый может самостоятельно сгенерировать пару открытый ключ и закрытый ключ.
Когда сервер возвращает открытый ключ A1 клиенту, посредникзаменятьОн отправляется в браузер как собственный открытый ключ B1.
И браузер в это время ничего не знает, по глупости использует открытый ключ B1 для шифрования ключа K и отправляет его,перехват человека посередине, посредник расшифровывает своим закрытым ключом B2, получает ключ K, а затем шифрует его открытым ключом сервера A1 и передает его серверу, завершая коммуникационную связь, причем сервер и клиент не знают.
HTTPS «человек посередине»
Основная причина этой проблемы заключается в том, чтоКлиент не может подтвердить, действительно ли полученный открытый ключ отправлен сервером. Чтобы решить эту проблему, в Интернете было введено общественное агентство доверия, которым является CA.
Прежде чем сервер будет использовать HTTPS, обратитесь в сертифицированный центр сертификации, чтобы подать заявку на сертификат.Цифровой сертификат, цифровой сертификат содержит такую информацию, как владелец сертификата, срок действия сертификата, открытый ключ и т. д. Сервер отправляет сертификат клиенту, и клиент проверяет, соответствует ли удостоверение сертификата удостоверению веб-сайта, к которому осуществляется доступ. , а затем выполняет последующие операции шифрования.
Однако, если посредник также немного умнее,Была изменена только часть открытого ключа сертификата, клиент по-прежнему не может подтвердить сертификатБыл ли он подделан, то нам нужна технология защиты от подделок.
Как упоминалось ранее, в асимметричном шифровании общий открытый ключ используется для шифрования, а закрытый ключ используется для дешифрования.Хотя шифрование с закрытым ключом теоретически осуществимо, оно не подходит из-за математической конструкции, поэтому закрытый ключ имеет только функция расшифровки Что?
В дополнение к расшифровке реальное использование закрытого ключа на самом деле имеет еще одно, то естьцифровой подписи, по сути, является технологией защиты от подделок, если кто-то подделал сертификат, цифровая подпись не может пройти проверку. Конкретный процесс выглядит следующим образом
- ЦС имеет собственную пару открытых и закрытых ключей.
- ЦС хэширует информацию открытого текста сертификата при выдаче сертификата.
- Хэш-значение с закрытым ключомдобавить подпись, получить цифровую подпись
Данные открытого текста и цифровая подпись образуют сертификат, который передается клиенту.
- Клиент получает сертификат и разбивает его на текстовую часть Текст и цифровую подпись Sig1
- Используйте открытый ключ центра сертификациинеподписанный, получить Sig2 (поскольку агентство ЦС является общедоступным доверенным лицом, информация о сертификате и открытом ключе агентства ЦС будет встроена в систему или браузер)
- Хэшируйте текстовую часть открытого текста с помощью алгоритма хеширования, объявленного в сертификате, чтобы получить T
- Когда значение хеш-функции H, рассчитанное самостоятельно, совпадает снеподписанныйСообщение Sig2равный, указывающий, что сертификат является доверенным,не испорченный
В это время подпись генерируется закрытым ключом организации ЦС, и посредник не может получить закрытый ключ организации ЦС после подделки информации, что обеспечивает достоверность сертификата.
Обратите внимание, что здесь есть сравнениеневыносимыйПроцесс подписи асимметричного шифрования заключается в том, что закрытый ключ подписывает сообщение, а затем отправляет часть подписи и само сообщение другой стороне.После получения сообщения часть подписи проверяется открытым ключом.Содержимое соответствует само сообщение, указывающее, что сообщение не было подделано.
В этом процессе сертификат и открытый ключ агентства ЦС, встроенные в систему или браузер, становятся важным звеном, что также является доказательством общедоступной доверительной идентичности агентства ЦС.Если такого агентства ЦС нет в системе или браузере, то клиент не может принять сертификат, возвращенный сервером, и отобразить предупреждение HTTPS.
По сути, сертификат агентства CA представляет собой цепочку доверия, A доверяет B, B доверяет C и так далее.Сертификат НаггетсНапример, Nuggets подает заявку на получение сертификата от RapidSSL, а удостоверение центра сертификации RapidSSL сертифицируется корневым центром сертификации DigiCert Global, образуя цепочку доверия.
Закрытые ключи агентств УЦ всех уровней являются абсолютно частной информацией, и в случае утечки секретных ключей агентств УЦ доверие к ним будет катастрофическим. несколько раз доУтечка закрытого ключа ЦС, вызывая кризис доверия, основные системы и браузеры могут отозвать только встроенный корневой сертификат соответствующего ЦС.
Некоторые старые веб-сайты потребуют загрузить и установить его собственный корневой сертификат перед его использованием.Это означает, что сертификат, используемый этим веб-сайтом, не может сформировать цепочку доверия между встроенным центром сертификации и корневым сертификатом системы.Вам необходимо установите корневой сертификат самостоятельно, чтобы сформировать доверительную цепочку, риск здесьПользователь несет ответственность за.
Суммировать
Отправной точкой HTTPS является решение проблемы подделки информации и мониторинга при передаче открытого текста HTTP.
- Чтобы учесть как производительность, так и безопасность, используется схема асимметричное шифрование + симметричное шифрование.
- Чтобы гарантировать, что открытый ключ не будет подделан при передаче, используется функция цифровой подписи асимметричного шифрования, а достоверность сертификата HTTPS гарантируется механизмом организации CA и системным корневым сертификатом.
Если вам это нравится, добавьте подписку, поставьте лайк, спасибо 💕😊