Эта статья поможет вам освоить HTTPS.

сервер алгоритм HTTPS Безопасность
Эта статья поможет вам освоить HTTPS.

Оригинальный автор: UC International R&D Sawahara


Спереди написано: Добро пожаловать в официальный аккаунт «UC International Technology», мы предоставим вам качественные технические статьи, связанные с клиентом, сервером, алгоритмом, тестированием, данными, интерфейсом и т. д., не ограничиваясь оригинальностью и перевод.



один,Введение в HTTPS.

>> 1.1 Что такое HTTPS<<

HTTPS, известный как безопасный протокол передачи гипертекста, добавляет уровень защищенной связи (SSL/TLS) между HTTP и TCP. (SSL является предшественником TLS. Он был переименован в TLS после того, как IETF стандартизировал SSL. Самая высокая версия SSL — 3.0, а более поздние версии — TLS1.0, TLS1.1, TLS1.2...)



>> 1.2 Зачем использовать HTTPS<<

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


  • Риск прослушивания. Поскольку это передача открытого текста, если узел сетевой передачи пассивен, содержимое передачи может быть перехвачено.

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

  • Рисковать. Истинная идентичность корреспондента не может быть проверена.


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


>> 1.3 Как HTTPS обеспечивает безопасность передачи<<

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


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


Чтобы надежно доставить симметричный ключ шифрования клиенту, HTTPSАлгоритм асимметричного шифрованияшифрованиеСекретный ключпередается клиенту. Однако открытый ключ асимметричного шифрования предоставляется клиенту в открытом виде, поэтому будет атака «человек посередине» (введение).Чтобы решить атаку «человек посередине», HTTPS вводит Цифровой сертификат.


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


Далее мы объясним несколько ключевых ссылок, посетив процесс рукопожатия https://www.baidu.com.


  • Client Hello


Client Hello — это первый шаг рукопожатия TLS, инициированный клиентом, и в основном содержит несколько фрагментов информации:

1. Самый высокий номер версии TLS, поддерживаемый клиентом.

2. Случайное число, используемое для последующего алгоритма получения симметричного ключа.

3. Список наборов шифров, поддерживаемых клиентами

4. Расширить информацию


  • Server Hello

1. Определите используемую версию TLS в соответствии с самой высокой версией протокола, поддерживаемой клиентом.

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

3. Сгенерировать случайное число для последующего алгоритма получения симметричного ключа.


  • Server Certificate

Возвращает сертификат сервера, вот цепочка сертификатов, включая промежуточные сертификаты.


  • Server Key Exchange

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

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

Если выбран алгоритм RSA, то симметричный ключ генерируется клиентом, а затем шифруется и передается на сервер для экспорта ключа, который называется предварительным мастер-ключом, поэтому шаг обмена ключами сервера отсутствует.


  • Client Key Exchange

Как было сказано выше, если алгоритм обмена DH (или ECDHE), то здесь будет передаваться публичный ключ, который будет использоваться сервером для генерации симметричного ключа.

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

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


  • Change Cipher Spec

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




2. Управление сертификатами

>> 2.1 Что такое сертификат<<

Мы упоминали слово сертификат много раз выше, так что же такое сертификат? Сертификат — это файл, который идентифицирует удостоверение в сетевой связи и в основном содержит такую ​​информацию, как пользователь, открытый ключ асимметричного шифрования, эмитент, подпись эмитента и срок действия.


>> 2.2 Какие сертификаты являются доверенными<<

Сертификат — это документ, идентифицирующий личность, так как же мы можем быть уверены, что этому документу доверяют? Сначала давайте посмотрим, как создается и проверяется сертификат:

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


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

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


Когда мы проверяем цепочку сертификатов, какой уровень мы должны проверять?


Я полагаю, что многие люди слышали о ЦС. ЦС - это центр сертификации цифровых сертификатов, который признается всеми. Система и браузер установят этот сертификат и вторичный сертификат, выданный сертификатом по умолчанию. Это все доверенные сертификаты. Конечно, в дополнение к этому, пользователи также могут вручную добавлять свои собственные доверенные сертификаты в список доверия.Когда мы проверяем цепочку сертификатов, если проверенный сертификат уже находится в списке доверия, то мы считаем сертификат сайта доверенным ( Даже в этом случае некоторых устаревших или алгоритмических уровней безопасности недостаточно, браузер все равно сочтет это небезопасным и выдаст предупреждающее сообщение).


Ниже приведет к доверенному списку браузера Chrome:



>> 2.3 Как отозвать сертификат<<

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


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


Online Certificate Status Protocol (OCSP) — механизм проверки статуса сертификатов в режиме реального времени.



3. Комплект шифрования

>> 3.1 Что такое наборы шифров<<

При введении процесса рукопожатия TLS, в дополнение к сертификату, есть необъяснимый термин, набор шифров. Что такое наборы шифров? Как показано ниже:

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


Kx — это алгоритм обмена ключами, используемый для шифрования ключа при обмене симметричным ключом при рукопожатии. Au — это алгоритм аутентификации подписи, и во время процесса рукопожатия требуется проверка подписи содержимого рукопожатия. Enc — это симметричный алгоритм шифрования, алгоритм шифрования, используемый для передачи данных после успешного рукопожатия. Mac — это алгоритм проверки дайджеста, используемый для обеспечения целостности сообщения. На рисунке показаны некоторые комплекты шифрования Mac=AEAD.Эта часть комплекта шифрования показывает, что сам алгоритм симметричного шифрования может гарантировать целостность сообщения и не требует алгоритма дайджеста.


>> 3.2 Как выбрать набор шифров<<

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


Хорошая рекомендация статьи:

Как JS определяет, установлено ли приложение для Android?



«UC International Technology» стремится делиться с вами высококачественными техническими статьями.

Добро пожаловать, чтобы подписаться на наш официальный аккаунт и поделиться статьей с друзьями