Код
#статьи

Протокол SSL: что это, как работает и зачем нужен

Сказ о протоколе-шифровальщике, без которого не обходится ни одна покупка в интернете.

Иллюстрация: Оля Ежак для Skillbox Media

В одной из предыдущих статей мы рассказывали, что SSL-сертификаты позволяют удостовериться в подлинности сайта и установить с ним защищённое соединение. Без этого сертификата нельзя безопасно отправить важные данные по Сети — ведь в теории любой сможет их перехватить, прочитать или изменить. Например, взять ваш онлайн-заказ в пиццерии и заменить все топпинги на чёрный перец и лакрицу 🙃

Сегодня же перейдём на более продвинутый уровень и разберёмся, как устроен сам SSL-протокол:


Что такое SSL-протокол

SSL, или secure sockets layer, — это протокол, который шифрует и защищает данные во время их передачи по интернету. Для этого он использует специальные криптографические ключи, изменяющие данные до неузнаваемости.

В модели TCP/IP протокол находится на прикладном уровне, а в OSI — между транспортным и прикладным. Здесь SSL отвечает за шифрование/дешифрацию и создание сессий, в рамках которых происходит общение между клиентом и сервером.

Сразу скажем, что сегодня SSL используют редко: его заменил более современный и безопасный протокол TLS. Разработчики взяли за основу SSL 3.0 и добавили туда пару улучшений — в основном связанных с безопасностью и поддержкой в разных браузерах.

И TLS, и SSL выполняют одну и ту же работу — создают соединения и защищают передачу данных по ним. Разница лишь в том, что TLS более современный, надёжный и безопасный.

Примерно так проходит процесс авторизации на сайте, где вы заказываете пиццу
Иллюстрация: Оля Ежак для Skillbox Media

Работу SSL-протокола можно описать следующим образом.

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

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

Пока всё звучит классно — протокол защищает наши данные и общается с сервером на своём языке. Но давайте узнаем, зачем он ещё нужен.

Зачем нужен SSL-протокол

Главная задача SSL— проверить подлинность сайта и установить с ним защищённое соединение. Каждый раз, когда вы заходите на какую-то страницу, браузер убеждается в том, что сайт настоящий, а не поддельный. А также узнаёт, можно ли безопасно передавать сайту личные данные.

Обычно, когда вы заходите на сайт, браузер использует протокол HTTP для передачи данных между клиентом и сервером. Это незащищённый протокол, а значит, данные перехватить может кто угодно. Поэтому поток данных, передаваемых по HTTP придумали шифровать протоколом SSL. Так появился стандарт HTTPS, где S означает secure. По сути, всё его отличие от предшественника как раз и состоит в использовании протокола SSL.

Подробнее о протоколе HTTP можно почитать в другой нашей статье — объясняем на пальцах, как он устроен и как работает.

Убедиться, что SSL-протокол работает, можно почти во всех браузерах. Например, в Google Chrome рядом с адресом сайта есть замок, который говорит о том, что передача данных защищена:

Скриншот: Skillbox Media

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

Без SSL интернет-транзакции были бы уязвимы к атакам типа man-in-the-middle («человек посередине»), а онлайн-покупки превратились бы в русскую рулетку. Возможно, сегодня пользователю повезёт и никто не перехватит три цифры на обороте его банковской карты, а возможно — нет, и кто-то купит пару биткоинов за его счёт.

Чем SSL-протокол отличается от SSL‑сертификата

SSL-протокол и SSL-сертификат работают в паре, но выполняют разные функции.

Протокол SSL определяет последовательность действий, которые нужно совершить, чтобы установить защищённое соединение между клиентом и сервером.

Сертификат SSL — это электронный документ. Он-то и содержит информацию о сайте, которая нужна для установки защищенного соединения. Туда входят:

  • данные о владельце сертификата;
  • публичный ключ для шифрования;
  • подлинная подпись.

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

Сертификат можно сделать и самостоятельно, и он будет иметь все те же данные, но браузеры воспримут его с подозрением. Это как купить люкс-копию AirPods — вроде бы дизайн и кейс те же самые, но сколько они проработают и подключатся ли вообще к телефону, неизвестно.

Перед тем как что-то передать сайту, браузер должен проверить его надёжность. Для этого и нужны SSL-сертификаты
Иллюстрация: Оля Ежак для Skillbox Media

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

Как работает SSL-протокол

Пора узнать, как клиент и сервер «жмут друг другу руки» и шифруют данные. Другими словами — как SSL работает на техническом уровне.

Когда вы пытаетесь подключиться к сайту, который защищён SSL, ваш браузер и сервер начинают «рукопожатие». Так называют процесс, когда браузер и сервер обмениваются информацией друг о друге. Для начала — сообщают, какие версии протокола установлены на обоих устройствах.

Затем сервер должен передать вашему браузеру договор «на подпись» — SSL‑сертификат. В нём будет храниться подробная информация о сайте. Но важнее всего — публичный ключ и подпись, которую выдаёт центр сертификации. Они нужны, чтобы проверить, что вы заходите на настоящий сайт, а не на его подделку.

SSL-протокол использует два типа ключей: публичные и приватные.

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

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

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

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

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

DpcuDl6eeIPaPav5JXG6QinLwC21ilDNSBVA80N4HJ4lHDQX8WsmIKN8TbT9bx8zqlUvLOoqLqhW5yC0jhmgwCR1P+nBYCBlEr//YDSHLq7J0MUJXPweOLLOfh5RGYOuYHWErWoD6TN5/Bq7JoqG4nW21UgXxYH0t8uT5mjrMZ8=

Попробуйте расшифровать наше послание, используя этот 1024-битный ключ. Вставьте текст выше в поле Enter Encrypted Text to Decrypt, а ключ ниже — в поле Enter Public/Private key.

Затем нажмите Decrypt

MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJCIFInmmQZ372f//XiuLJc7fpnHshhr+2n1OYkHsdnZYH6iTvzdOztwKyqXlKLJKESqh8vU9wt6Fgnn0yssRdxnvAhs8dOdLMUiFCpzTOkgRxuKZ/JOA8wDWLaf6TD11PhVS0IRKXVDh/PsEWJbgqaTzh/DbIlweDo05qVV/ZSdAgMBAAECgYA6uC6wABH3wM5xUF2opArVvoQm8iz3IxfX6ptfgtLNETXU/RheP3uLIH1JJqBqqpNDoozdUT61WPqPN7JhffE7hu+GKMMfTE4AbgXMUaKCOXACDc6M3t9TqyigrKZ78VDLMjFn+3Hpj35Pg4BttvRyHrE/Mon2FTG2H4ApMT9WuQJBANvX3LIC7bkw0gD//ixYgrqaJ0aKeFDqUKtWjEw7PQ4/bq1Y6kOh6wDeVERfilK7KRHXjhcVnaRgXWWytAf53QcCQQCoTVg+S63N26MsZxYmUIdvBNFdm36DW1ZIwbq+/LrGttGaSb0TVTn70rAUJg3h4HV1eF43s9m155CmTKVHFjw7AkB5esCTBRdDe/yvXMWgz4/9eO03B5EQdUn6Q6rm/NzyII8R7s4UbUakhjZeScTvjkhVeZ0kmGcxy6YQaj0dIy7FAkBBgiF31fMnrnb74IAhl7SvhLuNaOm8bT/PgACVOD/m+t/o4wzCSqkQGLjKjulWYwy1FY3utoVmJWULJcgrPD9jAkAu40gazHFfhIv4szuk1dKSvjanBtQtjrhKUZQ9lKih0YuKBX3uVvM+B8Ur50kzxJ8a8S+/+KI08xgTei8UYgD9

Как только текст зашифрован — пора передавать его на сервер. Тот его расшифрует с помощью своего приватного ключа и поймёт, что вы хотите от него получить.

Весь процесс работы SSL-протокола выглядит так
Иллюстрация: Оля Ежак для Skillbox Media

Данные переданы, процесс завершается, и соединение разрывается. При следующем визите на сайт всё повторится.

Как SSL-протокол шифрует данные

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

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

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

В SSL-протоколе два типа шифрования работают вместе. Асимметричное шифрование используют во время «рукопожатия» и аутентификации. Симметричное — для шифрование сообщений.

Вместе с шифрованием используют алгоритмы хеширования.

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

Что запомнить

Выделим основные тезисы, которые нужно запомнить об SSL-протоколе:

  • SSL защищает ваши данные во время передачи по интернету.
  • Он шифрует данные для защиты от несанкционированного доступа. А ещё — обеспечивает их целостность.
  • Для шифрования протокол использует два вида ключей: публичные и приватные. Публичные нужны, чтобы зашифровать сообщение, а приватные — чтобы расшифровать.
  • SSL-протокол и SSL-сертификат — это две разные вещи, которые работают вместе. Первый создаёт надёжное и безопасное соединение, а второй нужен, чтобы проверить подлинность сайта.

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована