Введение в HTTPS

Hypertext Transfer Protocol Secure (англ.: Hypertext Transfer Protocol Secure, сокращённо HTTPS, часто называется HTTP over TLS, HTTP over SSL или HTTP Secure) — это сетевой протокол безопасной передачи данных. Прежде чем подробно знакомиться с ним, сначала рассмотрим обычный протокол HTTP. HTTP — это протокол, используемый при обычном просмотре веб-страниц. Данные, передаваемые по протоколу HTTP, не шифруются, то есть являются открытым текстом, поэтому использование HTTP для передачи конфиденциальной информации очень небезопасно. HTTP использует порт 80 для связи, тогда как HTTPS использует порт 443. В компьютерных сетях HTTPS взаимодействует по протоколу передачи гипертекста (HTTP), но использует SSL/TLS для шифрования пакетов данных. Основная цель разработки HTTPS — обеспечить аутентификацию веб-серверов и защитить конфиденциальность и целостность обмениваемых данных. Этот протокол был впервые предложен Netscape в 1994 году и позднее расширен на Интернет.

Как работает HTTPS

Перед передачей данных HTTPS требует рукопожатия между клиентом (браузером) и сервером (веб-сайтом). Во время рукопожатия устанавливается парольная информация, используемая обеими сторонами для шифрования передаваемых данных. Протокол TLS/SSL — это не просто набор протоколов шифрованной передачи; это произведение искусства, тщательно созданное художниками. TLS/SSL использует асимметричное шифрование, симметричное шифрование и HASH-алгоритмы. Подробный процесс рукопожатия описан ниже:

  • 1) Браузер отправляет веб-сайту набор поддерживаемых им правил шифрования.
  • 2) Веб-сайт выбирает из них набор алгоритмов шифрования и HASH-алгоритмов и отправляет браузеру свою идентификационную информацию в виде сертификата. Сертификат содержит такую информацию, как адрес веб-сайта, открытый ключ шифрования и издатель сертификата.
  • 3) После получения браузером сертификата веб-сайта он должен выполнить следующее: a) Проверить подлинность сертификата (является ли выдающая организация законной, совпадает ли адрес веб-сайта, содержащийся в сертификате, с адресом, который посещается, и т. д.). Если сертификат является доверенным, в строке браузера появится небольшой значок замка; в противном случае будет выведено предупреждение о том, что сертификат не является доверенным. b) Если сертификат является доверенным или пользователь принимает недоверенный сертификат, браузер генерирует пароль, состоящий из строки случайных чисел, и шифрует его с помощью открытого ключа, предоставленного в сертификате. c) Использовать согласованный алгоритм HASH для вычисления сообщения рукопожатия, зашифровать это сообщение сгенерированным случайным числом и, наконец, отправить всю ранее сгенерированную информацию веб-сайту.
  • 4) После получения данных, отправленных браузером, веб-сайт должен выполнить следующие операции: a) Использовать собственный закрытый ключ для расшифровки информации и извлечения пароля, использовать пароль для расшифровки сообщения рукопожатия, отправленного браузером, и проверить, совпадает ли HASH с тем, который был отправлен браузером. b) Использовать пароль для шифрования сообщения рукопожатия и отправить его браузеру.
  • 5) Браузер расшифровывает сообщение рукопожатия и вычисляет его HASH. Если он совпадает с HASH, отправленным сервером, процесс рукопожатия завершается. После этого все передаваемые данные будут шифроваться с помощью алгоритма симметричного шифрования с использованием случайного пароля, ранее сгенерированного браузером.

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

  • Асимметричные алгоритмы шифрования: RSA, DSA/DSS
  • Алгоритмы симметричного шифрования: AES, RC4, 3DES
  • Хеш-алгоритмы: MD5, SHA1, SHA256

Диаграмма последовательности обмена данными для HTTPS выглядит следующим образом:

Различия между протоколом HTTPS и протоколом HTTP:

  • Протокол HTTPS требует получения сертификата от CA. Как правило, бесплатных сертификатов очень мало, и требуется плата.
  • HTTP — это протокол передачи гипертекста, и информация передаётся в открытом виде, тогда как HTTPS — это безопасный протокол передачи с SSL-шифрованием.
  • HTTP и HTTPS используют совершенно разные способы подключения и разные порты: первый использует 80, второй — 443.
  • HTTP-соединения очень просты и не имеют состояния.
  • Протокол HTTPS — это сетевой протокол, построенный на SSL + HTTP, способный обеспечивать шифрованную передачу и аутентификацию личности, и он безопаснее протокола HTTP.

SSL-сертификат

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

Типы сертификатов

На самом деле сертификаты, которые мы используем, бывают многих типов, и SSL-сертификаты — лишь один из них. Формат сертификата определяется стандартом X.509. SSL-сертификаты отвечают за передачу открытых ключей и являются типом сертификата PKI (Public Key Infrastructure). Обычные сертификаты, с которыми мы сталкиваемся, можно приблизительно классифицировать по их назначению на следующие типы:

  • 1. SSL-сертификаты, используемые для шифрования протокола HTTP, то есть HTTPS.
  • 2. Сертификаты подписи кода, используемые для подписи бинарных файлов, таких как драйверы ядра Windows, плагины Firefox, подпись кода Java и т. д.
  • 3. Клиентские сертификаты, используемые для шифрования электронной почты.
  • 4. Двухфакторные сертификаты. USB Key, используемый в профессиональном интернет-банкинге, применяет этот тип сертификата.

Все эти сертификаты выдаются сертифицированными центрами сертификации, которые мы называем организациями CA (Certificate Authority). В зависимости от того, является ли заявитель предприятием или физическим лицом, типы сертификатов, на которые можно подать заявку, различаются, и цены также различаются. Сертификаты, выданные организациями CA, являются доверенными сертификатами. Для SSL-сертификатов, если посещаемый веб-сайт совпадает с веб-сайтом, привязанным к сертификату, он может пройти проверку браузера без отображения ошибки.

Подача заявки на SSL-сертификат и правила

SSL-сертификаты можно заказать в организациях CA за плату или сделать самостоятельно. Сертификаты, выданные организациями CA, очень дороги, а срок их действия обычно составляет от одного до трех лет (разное количество лет — разная цена). После истечения срока нужно снова платить за подачу заявки, поэтому обычно только предприятия заказывают сертификаты. Однако с ростом числа личных веб-сайтов теперь появились услуги SSL-сертификатов для физических лиц, которые относительно дешевле. В Китае можно заказать один чуть более чем за 400 yuan, а за рубежом есть даже бесплатные SSL-сертификаты, доступные для заказа. При подаче заявки на SSL-сертификат необходимо предоставить организации CA доменное имя веб-сайта, лицензию на ведение бизнеса и идентификационную информацию заявителя. Доменное имя веб-сайта очень важно; заявитель должен доказать, что владеет доменным именем. Если бы SSL-сертификаты, поддерживающие Hotmail.com и Gmail.com, можно было заказать просто так, хакерам не нужно было бы использовать поддельные сертификаты для обмана.

Кроме того, сертификат обычно привязан только к одному доменному имени. Если у организации CA хорошее настроение, она может бесплатно привязать ещё одно. Например, если доменное имя, привязанное при подаче заявки, — www.example.com, то сертификат считается доверенным только тогда, когда адрес в браузере — https://www.example.com. Если адрес — https://tt.example.com или https://login.example.com, то, поскольку посещаемое доменное имя отличается от доменного имени, привязанного к сертификату, браузер всё равно отобразит его как недоверенный.

Организации CA также предлагают заявки на wildcard-домены (например, *.example.com). Wildcard-домен эквивалентен привязке всех поддоменов под основным доменом, поэтому пользоваться им очень удобно, но и цена чрезвычайно высока. Wildcard-домен стоит около 5,000 юаней в год, и подать заявку на него могут только предприятия.

Теперь давайте посмотрим на информацию в сертификате:

При посещении Hotmail происходит перенаправление на login.live.com. В этот момент в браузере IE появляется маленький замок. Щёлкните по этому маленькому замку, а затем нажмите «Просмотреть сертификат», чтобы увидеть окно сертификата, показанное выше. Здесь мы видим, что этот сертификат имеет только одно назначение — подтверждать информацию о личности удалённому компьютеру. У сертификатов много применений, и SSL — лишь одно из них. В поле «Кому выдан» указано доменное имя, привязанное при подаче заявки на сертификат; поле «Кем выдан» ниже — это издатель сертификата. Две даты внизу — это время подачи заявки на сертификат и срок его истечения. Здесь можно обратить внимание на информацию в поле «Кем выдан». В ней содержатся слова «Extended Validation SSL», что указывает на то, что этот сертификат — сертификат EV SSL (сертификат Extended Validation SSL). Сертификаты EV SSL обладают одной особенностью: они могут сделать адресную строку браузера зелёной и отобразить название компании, которой принадлежит сертификат, как показано ниже:

По сравнению с другими сертификатами SSL-сертификаты EV стоят дороже.

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

Процесс проверки сертификата

Сертификаты организованы в виде цепочки сертификатов. При выпуске сертификата сначала должен существовать корневой сертификат, выпущенный корневым CA, затем корневой CA выпускает сертификат промежуточного CA, и наконец промежуточный CA выпускает конкретный SSL-сертификат. Это можно понять так: корневой CA подобен компании, а корневой сертификат — это её удостоверение личности. У каждой компании есть разные отделы, которые выпускают сертификаты для разных целей. Эти разные отделы — промежуточные CA, и они используют промежуточные сертификаты в качестве своих удостоверений личности. Один из отделов специально отвечает за выпуск SSL-сертификатов. Когда корневой сертификат, промежуточный сертификат и наконец запрошенный SSL-сертификат связываются вместе, они образуют цепочку сертификатов, также называемую путём сертификации. При проверке сертификата браузер вызывает системный интерфейс диспетчера сертификатов, чтобы проверить все сертификаты в пути сертификации уровень за уровнем. Только если все сертификаты в пути являются доверенными, общий результат проверки будет считаться доверенным. По-прежнему используем сертификат login.live.com в качестве примера. При просмотре сертификата нажмите вкладку «Путь сертификации», и отобразится следующее:

Корневой сертификат — самый важный сертификат. Если корневой сертификат не является доверенным, то все сертификаты, выпущенные на его основе, также не являются доверенными. При установке операционная система по умолчанию устанавливает некоторые доверенные корневые сертификаты CA. Можно выполнить "certmgr.msc" в диалоговом окне "Выполнить", чтобы запустить диспетчер сертификатов, как показано ниже:

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

Если проверка SSL-сертификата не удалась, разные браузеры покажут следующие сообщения об ошибках:

Есть три причины сбоя проверки SSL-сертификата:

  • 1. SSL-сертификат не был выпущен доверенным центром сертификации (CA).
  • 2. Срок действия сертификата истёк.
  • 3. Доменное имя посещаемого веб-сайта не совпадает с доменным именем, привязанным к сертификату.

Эти три причины также являются подсказками, которые выдают браузеры IE.

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

Проблемы безопасности SSL-сертификатов

Наиболее распространённый метод атаки на HTTPS — подделка SSL-сертификата, также называемая SSL-перехватом, — это типичная атака типа «человек посередине». Однако SSL-перехват используется не только для атак. В некоторых особых случаях мы можем использовать SSL-перехват, чтобы более беспрепятственно получать доступ к сети. Я расскажу об этом позже.

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

Здесь есть заблуждение. Если SSL-сертификат не является доверенным, это не обязательно означает, что происходит перехват SSL. Одно из исключений: некоторые персональные сайты не могут позволить себе легитимные SSL-сертификаты, поэтому создают собственные SSL-сертификаты для шифрования передаваемых данных. Если вы часто посещаете персональный сайт и знаете, для чего этот сайт предназначен, то вам не нужно беспокоиться об этой ситуации. Но если вы посещаете сайты интернет-банкинга, онлайн-платежей или корпоративные сайты, такие как hotmail.com, gmail.com и т. д., такие сайты обязательно используют легитимные SSL-сертификаты (кроме 12306.cn). Как только SSL-сертификат не является доверенным, вы должны решительно прекратить посещение. В это время в сети обязательно есть аномальное поведение, и пользователям общедомовых широкополосных сетей следует обратить на это особое внимание.

Поэтому как индивидуальному пользователю вам необходимо знать, какой сайт вы посещаете. Если вы просто обычный интернет-пользователь без особых знаний о компьютерах, я полагаю, вы не будете часто посещать те персональные сайты, которые создают собственные SSL-сертификаты (кроме 12306.cn). Поэтому, если вы не можете определить, есть ли аномалия в сети, то как только возникнет проблема с сертификатом, просто прекратите посещение.

Совет: для 12306.cn обязательно следуйте тому, что написано на сайте: «Чтобы обеспечить беспроблемную покупку билетов, пожалуйста, скачайте и установите корневой сертификат».

Наконец, подведём итог вопросам, на которые следует обратить внимание при использовании SSL-сертификатов:

  • 1. Без необходимости не устанавливайте корневые сертификаты необдуманно. При установке корневого сертификата обязательно выясните источник сертификата.
  • 2. Для таких сайтов, как интернет-банкинг, онлайн-платежи и важная электронная почта, обязательно убедитесь, что с SSL-сертификатом нет проблем. Если браузер выдаёт предупреждение об ошибке SSL-сертификата, вы должны отказаться от посещения. Некоторым пользователям общедомовых широкополосных сетей следует обратить на это особое внимание.
  • 3. Поскольку теперь частным лицам относительно дешево получить SSL-сертификаты, обязательно остерегайтесь фишинговых сайтов, имеющих законные SSL-сертификаты (чаще встречаются за рубежом). Для фишинговых сайтов обязательно внимательно проверяйте доменное имя. Также не верьте никаким сообщениям о лотереях или призах и установите защитное ПО с защитой от фишинга.