Что такое протокол HTTPS, и как он защищает вас в интернете
Это руководство перепечатано из блога «Яндекса» для удобства пользователей. В нём идет речь о протоколе HTTPS, его актуальности, сферах применения и распространении.
Любое действие в интернете — это обмен данными. Каждый раз, когда вы запускаете видеоролик, посылаете сообщение в социальной сети или открываете любимый сайт, ваш компьютер отправляет запрос к нужному серверу и получает от него ответ. Как правило, обмен данными происходит по протоколу HTTP. Этот протокол не только устанавливает правила обмена информацией, но и служит транспортом для передачи данных — с его помощью браузер загружает содержимое сайта на ваш компьютер или смартфон.
При всём удобстве и популярности HTTP у него есть один недостаток: данные передаются в открытом виде и никак не защищены. На пути из точки А в точку Б информация в интернете проходит через десятки промежуточных узлов, и, если хоть один из них находится под контролем злоумышленника, данные могут перехватить. То же самое может произойти, когда вы пользуетесь незащищённой сетью Wi-Fi, например, в кафе. Для установки безопасного соединения используется протокол HTTPS с поддержкой шифрования.
Применение HTTPS
Все современные браузеры поддерживают протокол HTTPS. Его не нужно специально настраивать — он автоматически включается в процесс, когда это необходимо и возможно.
Почему HTTPS безопасен
Защиту данных в HTTPS обеспечивает криптографический протокол SSL/TLS, который шифрует передаваемую информацию. По сути этот протокол является обёрткой для HTTP. Он обеспечивает шифрование данных и делает их недоступными для просмотра посторонними. Протокол SSL/TLS хорош тем, что позволяет двум незнакомым между собой участникам сети установить защищённое соединение через незащищённый канал.
Предположим, сегодня последний день месяца, и вы вспомнили, что нужно заплатить за интернет. На сайте провайдера вы находите нужную ссылку и переходите в личный кабинет. Всю передаваемую информацию вы наверняка хотите сохранить в секрете, поэтому она должна быть зашифрована: это и ваш пароль, и сумма платежа и номер кредитной карты. Проблема в том, что изначально ваш компьютер обменивался данными с сервером провайдера по открытому каналу, то есть по HTTP. Как в таких условиях можно установить безопасное соединение по HTTPS, если предположить, что канал всё время прослушивается? Сделать это позволяет простая математическая уловка.
Как работает безопасное соединение
Представьте, что вы хотите передать какую-то вещь другому человеку. Вы кладёте её в ящик и отправляете по почте. А чтобы курьер — или кто угодно другой — не украл её, вы запираете ящик на замок. Курьер доставляет ящик, но ваш адресат не может его открыть — у него нет ключа. Тогда он вешает на ящик свой замок и отправляет обратно вам. Вы получаете ящик под двумя замками, снимаете свой — теперь это безопасно — и отправляете снова. Адресат получает, наконец, ящик, на котором висит только его замок, открывает его и достаёт то, что вы ему послали.
Это было нужно, чтобы обменяться с собеседником зашифрованными сообщениями. В ящике вы послали ему ключ от шифра, и теперь он известен вам обоим. Теперь вы можете открыто обмениваться зашифрованными сообщениями, не опасаясь, что их кто-то перехватит — всё равно их невозможно понять без ключа. Зачем такие сложности и почему нельзя было передать посылку отдельно, а ключ от замка отдельно? Конечно, можно было, но в таком случае нет гарантии, что ключ не перехватят и посылку не откроет кто-то другой.
На похожем принципе основана работа протокола SSL/TLS. При установке безопасного соединения по HTTPS ваш компьютер и сервер сначала выбирают общий секретный ключ, а затем обмениваются информацией, шифруя её с помощью этого ключа. Общий секретный ключ генерируется заново для каждого сеанса связи. Его нельзя перехватить и практически невозможно подобрать — обычно это число длиной более 100 знаков. Этот одноразовый секретный ключ и используется для шифрования всего общения браузера и сервера. Казалось бы, идеальная система, гарантирующая абсолютную безопасность соединения. Однако для полной надёжности ей кое-чего не хватает: гарантии того, что ваш собеседник именно тот, за кого себя выдаёт.
Зачем нужны цифровые сертификаты
Представьте, что ваша посылка не дошла до адресата — её перехватил кто-то другой. Этот человек вешает на неё свой замок, подделывает адрес отправителя и отправляет вам. Когда он таким образом узнаёт секретный ключ к шифру, он сообщает его вашему настоящему адресату от вашего имени. В результате вы и ваш собеседник уверены, что ключ к шифру был передан безопасно и его можно использовать для обмена зашифрованными сообщениями. Однако все эти сообщения легко сможет прочитать и перехватить третье лицо, о существовании которого вы никак не можете догадаться. Не очень-то безопасно.
Таким же образом в соединение между двумя устройствами в интернете может незаметно вклиниться третий участник — и расшифровать все сообщения. Например, вы заплатили за интернет по безопасному соединению, и платёж был получен. Но злоумышленник перехватил номер и код проверки подлинности вашей кредитки. Вы об этом ещё не знаете, а когда узнаете, будет уже поздно. Избежать такой ситуации помогает цифровой сертификат — электронный документ, который используется для идентификации сервера.
Вам как пользователю сертификат не нужен, но любой сервер (сайт), который хочет установить безопасное соединение с вами, должен его иметь. Сертификат подтверждает две вещи: 1) Лицо, которому он выдан, действительно существует и 2) Оно управляет сервером, который указан в сертификате. Выдачей сертификатов занимаются центры сертификации — что-то вроде паспортных столов. Как и в паспорте, в сертификате содержатся данные о его владельце, в том числе имя (или название организации), а также подпись, удостоверяющая подлинность сертификата. Проверка подлинности сертификата — первое, что делает браузер при установке безопасного HTTPS-соединения. Обмен данными начинается только в том случае, если проверка прошла успешно.
Если вернуться к аналогии с ящиком и замками, цифровой сертификат позволяет убедиться в том, что замок вашего собеседника на ящике принадлежит именно ему. Что это уникальный замок, который невозможно подделать. Таким образом, если кто-то посторонний попытается вас обмануть и пришлёт ящик со своим замком, вы легко это поймёте, ведь замок будет другой.
Распространение HTTPS
Одна из самых популярных рекомендаций любых интернет-сервисов — всегда использовать последние версии программного обеспечения. Если вы никогда не задумывались о том, зачем это нужно, то вот вам одна из причин — поддержка последних разработок в области безопасности.
Распространение HTTPS и вообще новых технологий в интернете во многом зависит от того, насколько быстро появляется инфраструктура для их использования. К примеру, если бы у половины пользователей интернета браузеры не поддерживали HTTPS, многие сайты просто не смогли бы его использовать. Это привело бы к тому, что сайт какого-нибудь банка, полностью перешедший на HTTPS, был бы недоступен у половины клиентов.
Кроме того, в криптографических протоколах, в том числе и в SSL/TLS, время от времени находят уязвимости, которые позволяют перехватывать даже зашифрованную информацию. Для устранения этих уязвимостей протоколы регулярно обновляют, и каждая следующая версия, как правило, надёжнее предыдущей. Поэтому чем больше людей устанавливают современные версии браузеров и других важных программ, тем надёжнее они будут защищены.
Где ещё применяется шифрование
В интернете немало протоколов обмена данными, помимо HTTP и HTTPS, и они тоже должны обеспечивать защиту. Например, Яндекс.Почта поддерживает шифрование входящих и исходящих писем, о чём можно прочитать в технологическом блоге на Хабрахабре. Мы заботимся о безопасности наших пользователей и стараемся защитить их данные везде, где это представляется возможным.
Глава 1. Введение в протоколы HTTP и HTTPS
Протокол HTTP предназначен для передачи содержимого в Интернете. HTTP — это простой протокол, который использует для передачи содержимого надежные службы протокола TCP. Благодаря этому HTTP считается очень надежным протоколом для обмена содержимым. Также HTTP является одним из самых часто используемых протоколов приложений. Все операции в Интернете используют протокол HTTP.
HTTPS — это безопасная версия протокола HTTP, которая реализует протокол HTTP с использованием протокола TLS для защиты базового TCP-подключения. За исключением дополнительной конфигурации, необходимой для настройки TLS, использование протокола HTTPS по сути не отличается от протокола HTTP.
Общие требования для протокола HTTP
Для правильной работы пакета NetX Web HTTP требуется установить NetX Duo 5.10 или более поздней версии. Кроме того, должен быть создан экземпляр IP, для которого включено использование протокола TCP. Для поддержки HTTPS также необходимо установить NetX Secure TLS 5.11 или более поздней версии (см. следующий раздел). Этот процесс показан в демонстрационном файле в разделе «Пример небольшой системы» главы 2.
Для HTTP-клиента из пакета NetX Web HTTP больше нет дополнительных требований.
Но HTTP-сервер из пакета NetX Web HTTP определяет еще несколько дополнительных требований. Во-первых, ему требуется полный доступ к известному TCP-порту 80 для обработки всех запросов HTTP-клиента (приложение может указать любой другой допустимый порт TCP). HTTP-сервер также разработан для работы с внедренной файловой системой FileX. Если система FileX недоступна, пользователь может перенести используемые разделы FileX в собственную среду. Этот процесс рассматривается в последующих разделах этого руководства.
Требования для протокола HTTPS
Для правильной работы протокола HTTPS на основе пакета NetX Web HTTP требуется, чтобы были установлены NetX Duo 5.10 или более поздней версии и NetX Secure TLS 5.11 или более поздней версии. Кроме того, должен быть создан экземпляр IP, для которого включено использование протокола TCP для работы с протоколом TLS. Сеанс TLS необходимо будет инициализировать с помощью соответствующих криптографических процедур и сертификата доверенного ЦС. Кроме того, потребуется выделить пространство для сертификатов, которые будут предоставляться удаленными узлами сервера во время подтверждения TLS. Этот процесс показан в демонстрационном файле в разделе «Пример небольшой системы HTTPS» главы 2.
Для HTTPS-клиента из пакета NetX Web HTTP больше нет дополнительных требований.
Но HTTPS-сервер из пакета NetX Web HTTP определяет еще несколько дополнительных требований. Во-первых, ему требуется полный доступ к известному TCP-порту 443 для обработки всех HTTPS-запросов клиента (как и в случае протокола HTTP без шифрования, приложение может изменить этот порт). Во-вторых, потребуется инициализировать сеанс TLS с помощью соответствующих криптографических процедур и сертификата удостоверения сервера (или общего ключа). HTTPS-сервер также разработан для работы с внедренной файловой системой FileX. Если система FileX недоступна, пользователь может перенести используемые разделы FileX в собственную среду. Использование FileX рассматривается в последующих разделах этого руководства.
Дополнительные сведения о параметрах конфигурации TLS см. в документации по NetX Secure.
Если не указано иное, все функции HTTP, описанные в этом документе, также относятся к протоколу HTTPS.
Ограничения протоколов HTTP и HTTPS
NetX Web HTTP реализует стандарт HTTP 1.1. Но существует ряд ограничений, которые приведены ниже:
URL-адрес HTTP (имена ресурсов)
Протокол HTTP разработан для передачи содержимого через Интернет. Запрашиваемое содержимое определяется URL-адресом. Это основной компонент каждого HTTP-запроса. URL-адреса всегда начинаются с символа «/» и обычно обозначают определенные файлы на HTTP-сервере. Ниже приведены типичные расширения файлов, используемые с протоколом HTTP:
Запросы HTTP-клиента
Эти команды ASCII обычно генерируются веб-браузерами и службами клиента NetX Web HTTP для выполнения операций HTTP на HTTP-сервере.
Ответы HTTP-сервера
Например, в ответ на успешно выполненный запрос PUT клиента для файла test.htm будет возвращено сообщение «HTTP/1.1 200 OK».
Взаимодействие по протоколу HTTP
HTTP-запрос GET
HTTP-запрос PUT
Проверка подлинности HTTP
Проверка подлинности HTTP является необязательной, то есть требуется не для всех веб-запросов. Существуют две разновидности проверки подлинности: обычная и на основе дайджеста. Обычная проверка подлинности по имени и паролю работает точно так же, как во многих других протоколах. При обычной проверке подлинности HTTP имя и пароли объединяются в одну строку и кодируются в формате Base64. Основным недостатком обычной проверки подлинности является то, что имя и пароль передаются в запросе в открытом виде. Это позволяет достаточно легко похищать такие имена и пароли. Дайджест-проверка подлинности устраняет эту проблему, так как при ней имя и пароль не передаются вместе с запросом. Вместо этого применяется специальный механизм вычисления 128-разрядного дайджеста по имени пользователя, паролю и некоторым другим параметрам. Сервер NetX Web HTTP поддерживает стандартный алгоритм дайджестов MD5.
Когда нужна проверка подлинности? HTTP-сервер самостоятельно решает, требуется ли проверка подлинности для запрошенного ресурса. Если проверка подлинности нужна, но в запросе от клиента нет необходимых данных проверки подлинности, то клиенту возвращается ответ «HTTP/1.1 401 Unauthorized» с указанием требуемого типа проверки подлинности. Ожидается, что клиент в этом случае сформирует новый запрос с правильными данными проверки подлинности.
При использовании протокола HTTPS HTTPS-сервер по-прежнему может использовать проверку подлинности HTTP. В этом случае для шифрования всего трафика HTTP используется протокол TLS, поэтому использование обычной проверки подлинности HTTP не обуславливает угрозу безопасности. Дайджест-проверка подлинности также допускается, но не обеспечивает значительного повышения безопасности по сравнению с обычной проверкой подлинности на основе протокола TLS.
Обратный вызов проверки подлинности HTTP
Как уже упоминалось, проверка подлинности HTTP является необязательной, то есть используется не при любой передаче данных через Интернет. Кроме того, проверка подлинности обычно зависит от конкретного ресурса. Один и тот же сервер может требовать проверку подлинности для доступа к некоторым ресурсам и не требовать для доступа к другим. Пакет HTTP-сервера Неткс позволяет приложению указать (с помощью вызова nx_web_http_server_create ) подпрограммы обратного вызова проверки подлинности, которая вызывается в начале обработки каждого HTTP-запроса клиента.
Эта подпрограмма обратного вызова предоставляет серверу NetX Web HTTP строковые значения имени пользователя, пароля и области, которые связаны с конкретным ресурсом, и возвращает необходимый тип проверки подлинности. Если для ресурса не требуется проверка подлинности, обратный вызов проверки подлинности должен возвращать значение NX_WEB_HTTP_DONT_AUTHENTICATE. Если для указанного ресурса требуется обычная проверка подлинности, эта подпрограмма должна возвращать NX_WEB_HTTP_BASIC_AUTHENTICATE. Наконец, если требуется дайджест-проверка подлинности MD5, подпрограмма обратного вызова должна возвращать NX_WEB_HTTP_DIGEST_AUTHENTICATE. Если ни для одного из ресурсов, предоставляемого HTTP-сервером, не требуется проверка подлинности, обратный вызов можно не указывать, передав в вызов для создания HTTP-сервера пустой указатель.
Формат подпрограммы обратного вызова проверки подлинности для приложения достаточно прост и определен ниже.
Входные параметры определяются следующим образом.
Возвращаемое значение подпрограммы проверки подлинности указывает, требуется ли проверка подлинности. Указатели на имя, пароль и область определения приложения не используются, если подпрограмма обратного вызова проверки подлинности возвращает значение NX_WEB_HTTP_DONT_AUTHENTICATE. В противном случае разработчик HTTP-сервера должен убедиться, что значения NX_WEB_HTTP_MAX_USERNAME и NX_WEB_HTTP_MAX_PASSWORD, определенные в файле nx_web_http_server.h, достаточно велики для размещения имени пользователя и пароля, указанных в обратном вызове проверки подлинности. По умолчанию оба значения равны 20 символам.
Обратный вызов для недопустимых значений имени пользователя или пароля HTTP
Чтобы зарегистрировать обратный вызов на HTTP-сервере, используется приведенная ниже служба, которая определена на сервере NetX Web HTTP.
Определены следующие типы запроса:
Обратный вызов для добавления заголовка даты GMT в HTTP
Этот необязательный обратный вызов на сервере NetX Web HTTP позволяет добавлять в ответные сообщения заголовок со значением даты. Он вызывается, когда HTTP-сервер отвечает на запрос PUT или GET.
Чтобы зарегистрировать обратный вызов для добавления даты GMT на HTTP-сервере, определена приведенная ниже служба.
Тип данных NX_WEB_HTTP_SERVER_DATE определяется следующим образом:
Обратный вызов для получения сведений из кэша HTTP
HTTP-сервер поддерживает обратный вызов для запроса ограничений по возрасту и датам для определенного ресурса в приложении HTTP. Эти сведения позволяют определить, будет ли HTTP-сервер отправлять всю страницу клиенту по запросу GET. Если в запросе клиента нет строки «if modified since» (если изменено позднее) или это значение не совпадает с датой «last modified» (последнее изменение), полученной в обратном вызове запроса сведений из кэша, то клиенту отправляется вся страница.
Чтобы зарегистрировать обратный вызов на HTTP-сервере, определена приведенная ниже служба.
Поддержка поблочного кодирования HTTP
Если определить общую длину сообщения HTTP перед отправкой невозможно, то можно использовать функцию поблочного кодирования для отправки сообщений в виде серий блоков без поля заголовка Content-Length. Эта функция поддерживается во всех сообщениях HTTP-запросов и HTTP-ответов. Эта функция поддерживается на стороне получателя, а заголовок блока автоматически обрабатывается внутренней логикой. На стороне отправителя клиентом и сервером должны вызываться интерфейсы API nx_web_http_client_request_chunked_set и nx_web_http_server_response_chunked_set соответственно.
Дополнительные сведения об использовании этих служб можно найти в главе 3 «Описание служб HTTP».
Поддержка многокомпонентных сообщений HTTP
Протокол MIME изначально предназначался для взаимодействия с протоколом SMTP, но теперь он используется и с протоколом HTTP. Протокол MIME позволяет включать в одно сообщение смешанные типы данных (например, image/jpg и text/plain). Сервер NetX Web HTTP включает в себя службы для определения типа содержимого в полученных от клиента сообщениях HTTP, содержащих данные MIME. Чтобы включить поддержку многокомпонентных сообщений HTTP и использовать эти службы, необходимо определить параметр конфигурации NX_WEB_HTTP_MULTIPART_ENABLE.
Дополнительные сведения об использовании этих служб можно найти в главе 3 «Описание служб HTTP».
Поддержка многопоточности HTTP
Службы клиента NetX Web HTTP можно вызывать из нескольких потоков одновременно. Но запросы на чтение или запись для конкретного экземпляра HTTP-клиента должны выполняться последовательно из одного потока.
При использовании протокола HTTPS службы клиента NetX Web HTTP могут вызываться из нескольких потоков, но ввиду повышенной сложности базовых функций TLS каждый поток должен использовать отдельный, независимый экземпляр HTTP-клиента (структуру управления NX_WEB_HTTP_CLIENT).
Соответствие протокола HTTP положениям документов RFC
NetX Web HTTP соответствует требованиям документов RFC 1945 «Hypertext Transfer Protocol/1.0» (Протокол передачи гипертекста, версия 1.0), RFC 2616 «Hypertext Transfer Protocol/1.1» (Протокол передачи гипертекста, версия 1.1), RFC 2581 «TCP Congestion Control» (Контроль перегрузки TCP), RFC 1122 «Requirements for Internet Hosts» (Требования к Интернет-узлам) и других связанных с ними документов RFC.
Реализация протокола HTTPS в NetX Web HTTP соответствует требованиям документа RFC 2818 «HTTP over TLS» (Передача данных HTTP по протоколу TLS).
Что такое протокол HTTPS и принципы его работы
В статье мы расскажем, что означает HTTPS в адресе сайта, как работает этот протокол и зачем вообще переходить на безопасное соединение.
Что такое защищенное соединение HTTPS
Миллионы интернет-пользователей постоянно обмениваются информацией. Это могут быть как дружеские беседы, весёлые картинки, рабочие переписки, так и банковские и паспортные данные, номера договоров и другая конфиденциальная информация. Работа всей всемирной паутины основана на протоколе HTTP. Благодаря нему пользователи могут передавать данные.
Сначала HTTP (HyperText Transfer Protocol) использовался только как протокол передачи гипертекста (текста с перекрёстными ссылками). Однако позже стало понятно, что он отлично подходит для передачи данных между пользователями. Протокол был доработан для новых задач и стал использоваться повсеместно.
Несмотря на свою функциональность у HTTP есть один очень важный недостаток ― незащищённость. Данные между пользователями передаются в открытом виде, злоумышленник может вмешаться в передачу данных, перехватить их или изменить. Чтобы защитить данные пользователей, был создан протокол HTTPS. Что же значит HTTPS? Расшифровка HTTPS ― HyperText Transfer Protocol Secure (то есть защищённый протокол HTTP). HTTPS работает благодаря SSL/TLS-сертификату.
SSL/TLS-сертификат ― это цифровая подпись сайта. С её помощью подтверждается его подлинность. Перед тем как установить защищённое соединение, браузер запрашивает этот документ и обращается к центру сертификации, чтобы подтвердить легальность документа. Если он действителен, то браузер считает этот сайт безопасным и начинает обмен данными. Вот откуда взялась и что означает S в HTTPS.
Система HTTPS похожа на провод, который состоит из двух слоёв: медная сердцевина и оболочка. Медная сердцевина ― основная часть провода, по которой идёт ток. Оболочка защищает контакты от внешних воздействий. Так, медная сердцевина ― это HTTP-протокол, а защитная оболочка ― это SSL-сертификат. Такое сотрудничество создаёт безопасное HTTPS-соединение.
Данные вашего сайта под защитой
Установите SSL-сертификат, и ваш сайт будет работать по безопасному соединению HTTPS
Ключи шифрования
Кроме подтверждения подлинности сайта, SSL-сертификат шифрует данные. После того как браузер убедился в подлинности сайта, начинается обмен шифрами. Шифрование HTTPS происходит при помощи симметричного и асимметричного ключа. Вот что это значит:
Чтобы установить HTTPS-соединение, браузеру и серверу надо договориться о симметричном ключе. Для этого сначала браузер и сервер обмениваются асимметрично зашифрованными сообщениями, где указывают секретный ключ и далее общаются при помощи симметричного шифрования.
Итак, какова функция протокола HTTPS?
Также стоит упомянуть, какой порт используется протоколом HTTPS по умолчанию. HTTPS использует для подключения 443 порт — его не нужно дополнительно настраивать
Схема работы HTTPS
Итак, протокол HTTPS предназначен для безопасного соединения. Чтобы понять, как устанавливается это соединение и как работает HTTPS, рассмотрим механизм пошагово.
Для примера возьмём ситуацию: пользователь хочет перейти на сайт REG.RU, который работает по безопасному протоколу HTTPS.

Зачем устанавливать HTTPS
Как мы говорили ранее, главная задача HTTPS — обеспечение безопасности передачи данных. Однако существует ещё несколько причин перейти на защищённое соединение:


Визуальное обозначение привлекает внимание пользователей и заставляет отказаться от посещения сайта, поэтому есть риск потерять потенциальных клиентов.
Доверие. Сайты, которые заботятся о данных пользователей, вызывают доверие со стороны клиентов. Это добавляет лояльности аудитории.
SEO-оптимизация. Поисковые системы с недоверием относятся к сайтам, работающим по HTTP-протоколу. Даже при грамотной SEO-оптимизации можно не достичь желаемых показателей.
Сайты не обязаны работать исключительно по HTTPS-протоколу. Однако защита данных ― это важный элемент современной интернет-коммуникации. Не стоит пренебрегать безопасностью клиентов, которые доверяют организациям свои личные данные. Если вы хотите перевести ваш сайт на безопасное соединение HTTPS, обратитесь инструкция.
Защитите данные с помощью SSL
Защитите данные на вашем сайте от мошенников. Установите SSL-сертификат, чтобы сайт работал по HTTPS-протоколу.







