Протокол SSL: что это, как работает и зачем нужен
Сказ о протоколе-шифровальщике, без которого не обходится ни одна покупка в интернете.
Иллюстрация: Оля Ежак для Skillbox Media
В одной из предыдущих статей мы рассказывали, что SSL-сертификаты позволяют удостовериться в подлинности сайта и установить с ним защищённое соединение. Без этого сертификата нельзя безопасно отправить важные данные по Сети — ведь в теории любой сможет их перехватить, прочитать или изменить. Например, взять ваш онлайн-заказ в пиццерии и заменить все топпинги на чёрный перец и лакрицу 🙃
Сегодня же перейдём на более продвинутый уровень и разберёмся, как устроен сам SSL-протокол:
- Что это такое
- Зачем он нужен
- Чем отличается от SSL-сертификата
- Как работает
- Как шифрует данные
- Резюме: что нужно запомнить
Что такое SSL-протокол
SSL, или secure sockets layer, — это протокол, который шифрует и защищает данные во время их передачи по интернету. Для этого он использует специальные криптографические ключи, изменяющие данные до неузнаваемости.
В модели TCP/IP протокол находится на прикладном уровне, а в OSI — между транспортным и прикладным. Здесь SSL отвечает за шифрование/дешифрацию и создание сессий, в рамках которых происходит общение между клиентом и сервером.
Сразу скажем, что сегодня SSL используют редко: его заменил более современный и безопасный протокол TLS. Разработчики взяли за основу SSL 3.0 и добавили туда пару улучшений — в основном связанных с безопасностью и поддержкой в разных браузерах.
И TLS, и SSL выполняют одну и ту же работу — создают соединения и защищают передачу данных по ним. Разница лишь в том, что TLS более современный, надёжный и безопасный.
Работу SSL-протокола можно описать следующим образом.
Когда вы заходите на сайт, защищённый SSL-протоколом, браузер устанавливает безопасное соединение с сервером сайта. Такое соединение нужно, чтобы вы могли не беспокоясь передавать конфиденциальную информацию — например, пароли или данные от банковских карт.
Как только соединение будет настроено, браузер с помощью криптографического ключа зашифрует сообщение и отправит серверу. Сервер получит этот непонятный текст и расшифрует с помощью своего ключа. Такое общение будет продолжаться до тех пор, пока вы не закроете вкладку.
Пока всё звучит классно — протокол защищает наши данные и общается с сервером на своём языке. Но давайте узнаем, зачем он ещё нужен.
Зачем нужен SSL-протокол
Главная задача SSL— проверить подлинность сайта и установить с ним защищённое соединение. Каждый раз, когда вы заходите на какую-то страницу, браузер убеждается в том, что сайт настоящий, а не поддельный. А также узнаёт, можно ли безопасно передавать сайту личные данные.
Обычно, когда вы заходите на сайт, браузер использует протокол HTTP для передачи данных между клиентом и сервером. Это незащищённый протокол, а значит, данные перехватить может кто угодно. Поэтому поток данных, передаваемых по HTTP придумали шифровать протоколом SSL. Так появился стандарт HTTPS, где S означает secure. По сути, всё его отличие от предшественника как раз и состоит в использовании протокола SSL.
Подробнее о протоколе HTTP можно почитать в другой нашей статье — объясняем на пальцах, как он устроен и как работает.
Убедиться, что SSL-протокол работает, можно почти во всех браузерах. Например, в Google Chrome рядом с адресом сайта есть замок, который говорит о том, что передача данных защищена:
Ещё протокол обеспечивает целостность данных: он защищает их от изменений в процессе передачи. Любые правки, которые внезапно появятся, будут обнаружены, а пользователь получит предупреждение о возможном нарушении безопасности.
Без SSL интернет-транзакции были бы уязвимы к атакам типа man-in-the-middle («человек посередине»), а онлайн-покупки превратились бы в русскую рулетку. Возможно, сегодня пользователю повезёт и никто не перехватит три цифры на обороте его банковской карты, а возможно — нет, и кто-то купит пару биткоинов за его счёт.
Чем SSL-протокол отличается от SSL‑сертификата
SSL-протокол и SSL-сертификат работают в паре, но выполняют разные функции.
Протокол SSL определяет последовательность действий, которые нужно совершить, чтобы установить защищённое соединение между клиентом и сервером.
Сертификат SSL — это электронный документ. Он-то и содержит информацию о сайте, которая нужна для установки защищенного соединения. Туда входят:
- данные о владельце сертификата;
- публичный ключ для шифрования;
- подлинная подпись.
Получить такой сертификат можно в официальном центре сертификации. Он будет гарантировать, что соединение защищено, а пользователи смогут безопасно передавать свои личные данные. Один из самых популярных центров сертификации в России — reg.ru.
Сертификат можно сделать и самостоятельно, и он будет иметь все те же данные, но браузеры воспримут его с подозрением. Это как купить люкс-копию AirPods — вроде бы дизайн и кейс те же самые, но сколько они проработают и подключатся ли вообще к телефону, неизвестно.
Как мы отметили выше, 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-протокол шифрует данные
Коротко расскажем об алгоритмах шифрования. Всего есть два больших класса алгоритмов — асимметричные и симметричные. Разница между ними только в количестве ключей.
Симметричные используют один общий ключ для шифрования и дешифрования. Ключ известен обеим сторонам — клиенту и серверу. Поэтому нужно не допустить, чтобы он потерялся, — иначе шифрование станет бессмысленным.
Асимметричные используют два ключа — публичный и приватный. Публичный ключ нужен для шифрования данных, поэтому его можно без проблем отправлять кому угодно. Приватный ключ нужен для дешифрования, поэтому его нужно держать в безопасном месте.
В SSL-протоколе два типа шифрования работают вместе. Асимметричное шифрование используют во время «рукопожатия» и аутентификации. Симметричное — для шифрование сообщений.
Вместе с шифрованием используют алгоритмы хеширования.
Хеширование — это способ превратить данные в строку фиксированной длины. Для этого данные пропускают через хеш-функцию, которая получает на их основе уникальную последовательность символов. В будущем по этой строке можно будет определить, редактировался файл или нет. Ведь даже если заменить один символ в текстовом документе, то его хеш изменится до неузнаваемости.
Что запомнить
Выделим основные тезисы, которые нужно запомнить об SSL-протоколе:
- SSL защищает ваши данные во время передачи по интернету.
- Он шифрует данные для защиты от несанкционированного доступа. А ещё — обеспечивает их целостность.
- Для шифрования протокол использует два вида ключей: публичные и приватные. Публичные нужны, чтобы зашифровать сообщение, а приватные — чтобы расшифровать.
- SSL-протокол и SSL-сертификат — это две разные вещи, которые работают вместе. Первый создаёт надёжное и безопасное соединение, а второй нужен, чтобы проверить подлинность сайта.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!