https считается HTTP для обеспечения безопасности связи. За исключением того, что у http больше адресов и порт по умолчанию изменен на 443, остальные по-прежнему остаются http.(За исключением открытого текста и небезопасности),Самое важное изменението естьhttp закончился TCP, а https https over ssl over TCP. Все функции безопасности реализованы на основе SSL.
Безопасность связи имеет четыре характеристики:
Основное отличие https по сравнению с http заключается в том, что на нижнем уровне имеется слой ssltls, и функция шифрования реализуется этим уровнем.
SSL — это протокол сеансового уровня и авторитетный стандарт в области информационной безопасности. Разработанный Netscape, он был переименован в tls, когда превратился в v3. Три версии v1.1, v1.2, v1.3.
Большинство используемых сейчас — это версия 1.2, и она в основном анализируется.
использоватьtlsДля построения ссылок требуется_Выберите набор шифров для безопасной связи*,такой же*Между обеими сторонами требуется согласование, поэтому клиент указывает, какие наборы шифров он поддерживает. Поле clientsuites указывает, что эти наборы шифров используются при окончательном согласовании._
Алгоритмы шифрования и дешифрования, используемые в TSL, делятся на симметричное и асимметричное шифрование.
в целом_Алгоритм симметричного шифрования прост и быстр.*(шифрование Для расшифровки используется тот же ключ, также называемый открытым ключом.)но*Передача открытых ключей не является безопасной. Открытые ключи передаются клиенту по сети в виде открытого текста._,При связывании всегда сначала вводите открытый ключ.,Затем назадклиент использует этот открытый ключ для отправки сообщения шифрования. Но если хакер заменяет открытый текст передачи открытого ключа, ваши данные будут переданы хакеру (заменяя место назначения и используемый алгоритм шифрования).
Другой — асимметричный, и алгоритм шифрования сложен, поэтому скорость шифрования очень низкая. На самом деле использование такого типа сетевой связи будет очень медленным.
Почему асимметрия безопаснее? Поскольку открытый ключ является общедоступным, закрытый ключ может храниться только на сервере. Закрытый ключ шифрует открытый ключ, а затем передает его клиенту. Клиент использует открытый ключ для расшифровки открытого ключа, зашифрованного закрытым ключом. затем использует открытый ключ для симметричного шифрования и передачи данных.
Шифрование с открытым ключом, расшифровка с закрытым ключом, подпись с закрытым ключом и проверка с открытым ключом (закрытый ключ здесь — это тот, который шифрует открытый ключ. Убедитесь, что то, что вы отправили, получено с сервера и не может быть отвергнуто. Это также функция безопасность. Подписание означает, что вы. Вы не можете отказать, потому что только у вас есть закрытый ключ. Даже если хакер получит ответное сообщение, он не сможет его подделать, потому что у него нет закрытого ключа сервера для подписи закрытого ключа, поэтому он не будет. преуспевать.)
Хакеры также могут маскироваться под клиентов и отправлять сообщения на сервер, поэтому для проверки личности клиентов также необходимы цифровые подписи. Использование подписей представляет собой шифрование с закрытым ключом.
Текущий процесс резюмируется следующим образом:
Почему подпись с закрытым ключом с асимметричным шифрованием все еще нуждается в целостности?
Предположим, мы используем механизм подписи асимметричного шифрования для передачи данных, при котором между A и B необходимо обмениваться конфиденциальной информацией. A подписывает информацию, используя свой собственный закрытый ключ, а затем отправляет подписанную информацию B вместе с исходной информацией. После того, как B получает информацию, он использует открытый ключ A, чтобы проверить подпись и убедиться, что исходная информация не была подделана.
Однако,В этом процессе могут возникнуть некоторые проблемы. первый,*Управление ключами и их распределение являются важным вопросом. *A и B должны гарантировать, что обмен ключами друг друга безопасен и надежен, что требует безопасного согласования и распределения ключей. ** *если_В случае утечки или изменения ключа механизм подписи выйдет из строя и безопасность данных не может быть гарантирована._
проходить_Введя проверку целостности, мы можем добавить уровень гарантии, гарантирующий, что данные не будут подделаны во время передачи._
Несмотря на то_В случае каких-либо технических проблем или утечки ключа проверка целостности также может обнаружить изменения в данных, тем самым напоминая нам о необходимости принятия своевременных мер для защиты целостности данных._
Другими словами, хотя использование ключа может гарантировать, что данные не будут подделаны, если используемый секретный ключ будет подделан, данные будут утечки и подделаны. Используя проверку целостности, можно обеспечить дополнительный уровень гарантии. предусмотрено, но если цифровой дайджест По-прежнему существуют проблемы с скомпрометацией и подделкой ключей шифрования. Это просто означает, что это может быть дополнительным уровнем уверенности.
Вот_Полнота достигается за счет сводного алгоритма (большой контент становится маленьким контентом, маленький контент не может вывести большой контент)_из,Общие из них включают md5 и sha1.,Но tls использует sha2,сводный алгоритм также требует шифрования (это шифрование также небезопасно для использования симметрии,Поэтому асимметрия тоже обязательна (подробнее ниже)
Видно, что текущее общение считается безопасным, но небезопасное место есть только одно. есть_Проблемы доверия к открытым ключам*。黑客也可к进行发布自己изоткрытый ключ,*Если сервер и клиент получат открытый ключ хакера, связь будет небезопасной. (Хакеры могут расшифровать и получить все данные связи)_
Конкретно то есть_Как доказать, что ваш открытый ключ принадлежит вам*?这инравиться何证明这да你发из消息一样Понятно不да?Так же*Для шифрования этого опубликованного открытого ключа требуется закрытый ключ._,Что***нравиться何保证这个私钥解密изоткрытый ключто есть Где чье-то? Для шифрования также требуется закрытый ключ,** *Итак, я попал в круг.
То есть, когда открытый ключ должен быть проверен на подпись, если гарантировано, что открытый ключ является открытым ключом подписавшего, ответом будет подпись с использованием закрытого ключа верхнего уровня. Аналогично, как это доказать. открытый ключ находится на верхнем уровне. Требуется подняться на один уровень и продолжать поиск открытого ключа, который является открытым ключом авторитетной организации. Вы можете использовать это, чтобы найти всю проверенную информацию об открытом ключе подписи ниже. (От этого трудно защититься, а авторитетные учреждения также могут подвергнуться атакам и захвату)
Так на основе этой идеи появились институты CA и сертификаты CA.
Разве вам не всегда нужно проверять, кто это опубликовал? Это для того, чтобы проверить, кто его подписал.
Центры сертификации по всему миру выпускают сертификаты dv, ov и ev.。
Сертификат встречи包含一些信息РанназадИспользуйте сертификат верхнего уровня, чтобы проверить, безопасен ли этот сертификат, и продолжайте поиск, пока не найдете включенную проверку корневого сертификата.
dv заслуживает доверия на уровне доменного имени и имеет самый низкий уровень доверия. ev – сертификат самого высокого уровня, прошедший юридические процедуры.
Как сохранить эти корневые сертификаты? Очень просто сохранить их в операционной системе и получить сертификат, выданный клиентом или сервером (раньше это был открытый ключ, а теперь это сертификат? представлятьиз信息встреча更多),Затем проверьте, безопасно ли это с помощью этих корневых сертификатов операционной системы.,Если он не содержит открытый ключ веб-сайта, переданный сертификат может быть поддельным и небезопасным сообщением.
Это может быть преимуществом, а может быть недостатком。*Некоторая информация сертификата открытого ключа, которая не была сохранена и отправлена в центр сертификации для проверки, будет перехвачена во время связи, что указывает на то, что безопасный доступ возможен только к зарегистрированной информации открытого ключа; *или может_Добавьте информацию о корневом сертификате в свою операционную систему._
Вы должны зарегистрироваться в ЦС, иначе вы не сможете узнать, был ли открытый ключ, который вы используете для связи с сервером, захвачен хакером. Используется открытый ключ хакера, и весь ваш коммуникационный контент может быть просмотрен. хакеры Чтобы облегчить регистрацию, многие центры сертификации локального уровня. Система бесплатна, и вы можете напрямую добавить ее в систему сертификатов (необходимы знания для миграции https).
Мир не совсем безопасен, как и общение.
Точно так же, как почему целостность все еще необходима после появления асимметричного шифрования, в мире не существует абсолютной безопасности. Секретный ключ асимметричного шифрования может быть взломан, а затем хакеры модифицируют содержащийся в нем открытый ключ, чтобы украсть информацию; такой же_Организацию ЦС также можно обмануть, выдав неправильный сертификат и небезопасный сертификат. В частности, хакеры могут проникнуть в ЦС и добавить свои собственные сертификаты, чтобы обезопасить свои открытые ключи._。
Такие вещи действительно происходили в истории! В этом случае вы можете только исправить, обновить и восстановить ЦС или очистить сертификат ЦС в операционной системе и добавить его в черный список.
Вот краткое описание того, как TLS на нижнем уровне https обменивается наборами шифров и используемыми открытыми ключами.
На первом изображении показан текущий процесс установления связи TLS для https.
Алгоритм ECDHE: этот протокол шифрования позволяет серверу и клиенту вычислить используемый ими открытый ключ (сервер вычисляет параметр сервера, а клиент вычисляет параметр клиента, оба из которых представляют собой информацию об открытом ключе, рассчитанную самостоятельно).
severparam — открытый ключ, зашифрованный закрытым ключом сервера.ипроходить Понятноcaисследовать,clientparam也даиспользоватьechdeрасчет Приходитьизклиентоткрытый ключ,клиент_расчетpreпосле Сноварасчетmaster*,Ранназад*Снова Использовать мастергенерироватьклиентизоткрытый ключ_ В дальнейшем при отправке сообщений на сервер этот открытый ключ будет использоваться для симметрично зашифрованной связи.
Как бы ты ни играл, в конце концов Содержимое шифруется с помощью Симметричное шифрование(Объем данных слишком велик,использовать Симметричное шифрованиебыстрый),но_Для цифровых сводок используйте несимметричное шифрование._(数量少и更加安全。、)。
Можно увидеть шифрование много раз,первый_Открытый ключ и открытый ключиспользоватьподготовленный секретный ключechderaсчет_ Потом снова использоватьклиент мастер создания случайных чисел на стороне сервера,Три случайных числа более безопасны,Ранназад_Восстановите открытые ключи, используемые каждым клиентом для последующей зашифрованной отправки._
Традиционный метод не так уж и сложен. Pre вычисляется непосредственно из случайных чисел (второе изображение) вместо использования набора алгоритмов шифрования для повторного шифрования двух открытых ключей. Но процесс после этого тот же. Используйте случайное число клиентского сервера и предварительно удалите мастер-секрет.
Требуется слишком много работы по адаптации для всех приложений.
*tls1.2 требует двух подключений, чтобы клиент и сервер могли отдельно вычислить мастер-секрет. *После обновления до tls1.3 существовать_На этапе clienthello clientparam и clientrandom могут быть отправлены на серверный компьютер_中использоватьиз服务端открытый ключ(cpиspрасчетpre,кт и ст и прерасчетмастер),Затем сервер передает клиенту st и sp.,клиент вычисляет используемый открытый ключ. Уменьшите один rtp связи
потому что_Сервер отправит цепочку сертификатов клиенту.,Ранназадклиент进行证书из链条验证*,вклиент不仅需要использовать传递过Приходитьизspоткрытый ключ解密出caСертификат тоже нужен*Перейдите в центр сертификации, чтобы узнать, действителен ли текущий сертификат._
Доступ к центру сертификации — это еще один процесс установления соединения, который, как вы понимаете, требует много времени.
Однако CRL регулярно обновляется, и существует проблема временного окна, и поскольку количество отозванных сертификатов продолжает увеличиваться, объем передаваемых данных также будет увеличиваться. Более того, если в запрошенном CRL есть только один сертификат с истекшим сроком действия или вообще нет. сертификат с истекшим сроком действия в цепочке ЦС, это пустая трата времени и трафика.
Ссылка для объяснения OCSP:
В любом случае процесс проверки сертификата ЦС требует как минимум одного сетевого запроса, что неизбежно.
проходить前面из讲解可к看出_https имеет на одно рукопожатие tls больше, чем http*,на этот раз рукопожатие*В основномклиент План переговоров на стороне серверарасчетmaster секрет используется для зашифрованной связи сеанса_。фокусто есть расчетный мастер после ключа для шифрования связи
если_Возможность повторно использовать этот главный секрет_Что么就不需要tlsЧто么复杂из计Рассчитать过程Понятно。
поэтому_Повторное использование сеанса означает И клиент, и сервер сохраняют идентификатор сеанса и сохраняют мастер этого сеанса в памяти. секретная информация_。
При установлении соединения,клиент Отправить разговорidРанназад_Идентификатор сеанса на стороне сервера находит главный секрет, соответствующий стороне сервера.И отправьте идентификатор сеанса, версию tls и т. д., используемые сервером, наклиент, чтобы проверить, можно ли его использовать повторно*,клиент Если вы можете использовать секретный ключ, соответствующий идентификатору сеанса, для его расшифровки, вы можете получить версию tls, используемую сервером, и идентификатор сеанса сервера.,если验证проходитьназадвстреча_Отправить клиенту_Завершить сообщение, зашифрованное с помощью главного секретапредставлять*Повторно используйте главный секрет._
Этот метод называется повторным использованием идентификатора сеанса, при котором сохраняется идентификатор сеанса и соответствующий мастер. секрет. Процесс выглядит так, как показано на рисунке 1.
sessionidда_В настоящее время наиболее широко используемая технология оптимизации установления соединения TLS.*,но有个缺点да*sessionID необходимо сохранить на стороне сервера.,с клиентом все в порядке, но для сервера тысячи клиентских обращений будут занимать тысячи идентификаторов сеансов в памяти сервера.,Очень повлияло на производительность._
Проблема в том, что серверу необходимо хранить идентификатор сеанса.,Прорыв есть_Измените хранилище на расчет с фиксированным алгоритмом. Хранилище не требуется. Когда придет время, клиенту будет передан только расчет сервера.*(Этот планрасчет Приходитьиз东西то естьsession ticket),клиенткназадВозьмите этот билет с собой при повторном установлении соединения., 服务端потому что没有存储所к需要*По некоторым данным, отправленным клиентом, мы можем использовать алгоритм, чтобы определить, правильный ли билет или нет, и его можно повторно использовать и связывать._(比нравитьсяtcpЕсть срок действия подключения,В течение срока действия ссылка будет закрыта, поэтому необходимо проверить, не истекла ли сессия и не отключилась)) Билет нуждается в шифровании, когда сервер отправляет его клиенту.,Этот секретный ключ шифрования также необходимо регулярно обновлять.
Вышеупомянутые идентификатор сеанса и сеанс Билеты требуют одного rtt (туда и обратно), есть ли 0rtt? Конечно, ты можешь есть_При отправке билета укажите данные, отправленные позже._ (Это считается за 0? rttШерстяная ткань?哈哈当Ран Рассчитать因为_Данные начались_),Это решение называется psk (предварительно shared key) означает, что клиент при отправке билета приносит данные приложения.
ID и билет отменены в tls1.3,Пропустить проверку сертификата tls Схема расчета секретного ключа использует psk (оптимизация по билету)
http1.0изhttps已经да_достаточно безопасноДа, ноНет повышения эффективности передачи данных*,поэтому*После запуска протокола Google чиновник выпустил новый протокол: http2._(没有小数да因为кназад没有小版本Понятно)
Каковы точки оптимизации http?
Предыдущая версия 1.0использовать ПонятноcontentencodingизgzipСжатые данные о телено大部分情况下bodyВсего десяток байт иРазмер заголовка составляет сотни или тысячи байт, поэтому заголовок также сжимается.
hpack использует словари для уменьшения повторяющихся значений и замены их индексами.
к往изhttp1.0даклиент Отправилназад_Необходимо дождаться возвращения сервера, прежде чем отправлять снова.*,если*Если обработка предыдущего сообщения займет время, это повлияет на отправку последующих сообщений._ **** Вызывает проблему «противоположной блокировки».
В http2 эта проблема решается другим способом. Передача кадров данных осуществляется на основе одного и того же сообщения. Несколько кадров данных одного и того же сообщения упорядочиваются и идентифицируются, а при общении устанавливается концепция потока. Поток используется для передачи кадров данных, которые после отправки на сервер собираются в тело и заголовок http1.0. Поток не заботится о содержимом кадра данных, поэтому можно добиться мультиплексирования. Один поток может передавать кадры данных с несколькими разными сообщениями и ждать, пока сервер будет собран (одновременно также появятся несколько управляющих кадров) ( для передачи потока управления) Как решить проблему блокировки одноранговых узлов? Поскольку он больше не отправляет предыдущее сообщение, а принимает поток для отправки данных, зависимость меняется от ответа предыдущего сообщения на то, есть ли свободный канал потока для передачи данных.
Кадры данных в потоке должны быть в порядке при отправке потока, но поток отправляется не по порядку и может быть отправлен несколько раз одновременно. Клиент может использовать идентификатор потока, чтобы изменить неупорядоченный поток на упорядоченный поток. сервер
Хотя несколько потоков отправляются в произвольном порядке и могут быть отправлены не по порядку, потокам можно присвоить приоритет отправке того, какой поток будет первым.
Подвести итог:Между потоками нет порядка, но может быть приоритет.,Кадры данных, отправляемые в потоке, должны быть гарантированно последовательными.(но不需要保证多个поток按顺序发送,поэтому,*Идентификатор потока не может быть использован повторно (клиент нечётное число, сервер четное число) *,клиент Сервер может инициировать передачу потока,Потоки могут отправляться одновременно.
Для совместимости с версией 1.0 данные по-прежнему передаются в виде открытого текста, но в конечном итоге преобразуются в двоичные.
Зашифрованная версия http2 используется большинством браузеров, и появляются версии с суффиксом h2c и h2.
http1.1 может установить до 6-8 TCP-ссылок для доменного имени. Во-первых, блокируется начало очереди. Во-вторых, этот метод можно использовать для параллельной загрузки при загрузке файлов.
(Загрузите один за другимtcpСвязьно1.1要求请求只能существовать上一个请求из响应回Приходитьназадотправить)Открыв несколько ссылок, вы можете косвенно отправлять несколько запросов одновременно.
Поскольку в http2 есть концепция потока,поток может Одновременная отправка не требует ожидания соответствующего сообщения от сервера.
(В основном решает проблему лобовой блокировки Также решено Загрузка больших файлов не требует ожидания соответствующих сообщений от сервера. Так что вы всегда можете отправлять запросы и1.1из开多个tcpСвязь_Цель состоит в том, чтобы продолжать отправлять запросы_ Не нужно ждать принимать Соответствующее ответное сообщение ) и может обеспечить двустороннюю передачу.
Следовательно, для решения проблемы блокировки нет необходимости в методе установления нескольких ссылок для получения данных о доменном имени в http1 (отправка сообщения запроса должна ждать, пока не будет отправлено ответное сообщение предыдущего запроса, поэтому несколько ссылок необходимо отправить несколько запросов)
поэтому_Из-за этой функции в http2 установка нескольких ссылок на доменное имя отключена.*,因为你可к*Использовать поток Также возможна двусторонняя связь нужно Сервер ожидания может отправлять сообщения соответственно, а также может отправлять несколько потоков одновременно (потоки напрямую не мешают друг другу)_
Однако этот метод также имеет тот недостаток, что, поскольку запрос может быть отправлен без ответа, хакеры могут одновременно отправлять несколько запросов для атаки на сервер.
На основе версии 1.0 в http2 добавлена концепция кадра двоичной последовательности кадров и потока strme, а также встроены функции https, такие как tls.
Ознакомьтесь с проблемой блокировки злоумышленников:
http2 в большинстве случаев решает проблему блокировки заголовка версии 1.0, поскольку после отправки сообщения запроса версии 1.0 необходимо дождаться, пока сервер отправит соответствующее сообщение, прежде чем продолжить отправку, если предыдущий запрос сообщения не получил ответа. с сервера последующие сообщения не будут отправлены, но несколько сообщений HTTP2 напрямую станут несколькими потоками. Потоки могут отправляться одновременно без последовательности. Поэтому после преобразования сообщений в потоки нет никаких зависимостей, их можно отправлять. непрерывно, не дожидаясь ответа, и их можно мультиплексировать.
Потому что http — это протокол верхнего уровня.,其依赖из_Базовый протокол TCP также имеет проблему блокировки начала строки.*,В TCP существует механизм повторной передачи при потере пакетов.,Для протокола TCP поток будет разделен на более мелкие сегментированные сегменты для передачи.,*当前面из包没有принимать到时Несмотря на тоназад面из包传输过Приходить Понятно也不встреча进行给上次而да放существовать缓存区中等待前面из包传输过Приходитьпосле Снова组装发给上层。_
потому что_TCP является надежной передачей и может только блокировать и ждать ранее потерянные пакеты.,Пока все сумки впереди не будут перемещены на после, а затем не переданы на верхний уровень.,Потеря пакетов не допускается._
Видно, что у TCP есть проблема с блокировкой начала строки. Если вы хотите полностью решить эту проблему, вы не можете использовать TCP.,Google увидел эту проблему и запустил gquicпротокол (tls,stream,Пакет равен прикладному уровню (протоколу).,назад Приходить Стандартизированное соответствие IETF было извлечено в протокол транспортного уровня iquic. (Один слой с tcpudp).
Определение QUIC:
quic инкапсулирует udp让其可к完美解决队头阻塞对于丢失из包不关系可к继续传输,ипотому чтоВстроенный поток, tls и т.д.,Реализация протокола http3 очень проста, большая часть работы выполняется быстро.。
Отныне quic относится к протоколу iquic.
http2 используется для использования TCP-ссылок, чтобы определить, изменился ли адрес связи через IP-адрес.
Если IP-адрес изменится, TCP-ссылку необходимо будет восстановить, но поскольку http3 основан на случайных идентификаторах, оно не будет повторно подключено.
http3 не указывает номер порта сервера, например 1.0 и 2. Причина в том, что вам нужно сначала подключиться через http2, а затем использовать http3 для подключения через расширенный фрейм в http2.