Что такое SSL?

Работаю в хостинге: размещаем сайты пользователей на своих серверах.


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


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


Прошу прощения за недельное отсутствие постов. На нашу скромную хостинг-площадку лился ddos, из-за которого нашему небольшому коллективу пришлось поработать сверхурочно. На написание поста не было времени.


Сегодня кратко расскажу про SSL.


По традиции, начнём с вольного определения. SSL (Secure Sockets Layer) – это специальный протокол, используя который, данные от узла к узлу Cети передаются в зашифрованном виде. И работет он так, что расшифровать данные может только их целевой получатель.


И, опять же, по традиции, небольшая ремарка. То, с чем работает современный интернет, в большинстве случаев – это TLS, наследник SSL. Но все по привычке называют его SSL, как полицию до сих пор именуют милицией. По сути своей, функции исполняет те же, но лучше (я надеюсь).

Что такое SSL? IT, Ssl, Хостинг, Познавательно, Длиннопост

Зачем оно нужно?

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


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


Яркий пример, который вы самостоятельно можете пронаблюдать — это движение данных от вашего компьютера к какому-либо сайту, например на yandex.ru (не сочтите за рекламу, но, судя по всему, ICMP и UDP на сервере pikabu.ru закрыт, поэтому трассировка до него просто не доходит, а хочется продемонстрировать целостный результат). Сделать это можно при помощи встроенной в любую сетевую ОС утилиты трассировки.


Например, на windows:

Что такое SSL? IT, Ssl, Хостинг, Познавательно, Длиннопост

Или на unix:

Что такое SSL? IT, Ssl, Хостинг, Познавательно, Длиннопост

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


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


Так в феврале 1995-го свет увидел SSL 2.0 (первая его версия так и осталась в бета-тесте и никогда не была опубликована).


Крайняя версия протокола выпущена в 2008-м. А в данный момент (с января 2016) в процессе разработки находится обновление, которое сейчас доступно только в виде черновиков.


Как это работает?

Попробую кратко небольшую вводную.


Есть определённая схема, по которой компьютеры обмениваются информацией через сеть. Для совместимости передачи данных между любыми системами, схема передачи эталонизирована. И имеет название «Модель OSI» Она состоит из нескольких уровней.


В модели есть транспортный уровень. Который отвечает за доставку данных. На текущий момент монопольное положение на этом уровне занял сетевой протокол — TCP/IP. Через который мы все с вами ходим в Сеть. Это основоплагающий протокол, который является стандартным для передачи данных в современных компьютерных сетях. Он также включает в себя около двух сотен других протоколов, в том числе часто используемые протоколы прикладного уровня, такие как HTTP, FTP, SMTP и т. д.


Итак, простым языком, как происходит шифрование данных.

Если вы открываете какой-то сайт, то сервер передаёт по HTTP (прикладной протокол) данные на наш компьютер. Условно, эта передача данных выглядит так:

Что такое SSL? IT, Ssl, Хостинг, Познавательно, Длиннопост

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


Если же сайт использует SSL, то данные кладутся в специальную коробочку, перемешиваются, а затем передаются вам в этой коробочке. Так получается HTTPS (как http, только лучше):

Что такое SSL? IT, Ssl, Хостинг, Познавательно, Длиннопост

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


Чуть более сложным языком: как это получается?

Соединение между вашим компьютером и сервером с сайтом производится в несколько этапов:

1. Ваш компьютер (клиент) устанавливает соединение с сервером и запрашивает защищенное подключение.

2. При установке соединения клиент предоставляет список алгоритмов шифрования, которые он «знает». Сервер сверяет полученный список со списком алгоритмов, которые «знает» сам сервер, и выбирает наиболее надежный алгоритм, после чего сообщает клиенту, какой алгоритм использовать

3. Сервер отправляет клиенту свой цифровой сертификат, подписанный удостоверяющим центром, и открытый ключ сервера.

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

5. Генерируется сеансовый ключ для защищенного соединения. Это делается следующим образом:

— Клиент генерирует случайную цифровую последовательность

— Клиент шифрует ее открытым ключом сервера и посылает результат на сервер

— Сервер расшифровывает полученную последовательность при помощи закрытого ключа

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


Таким образом устанавливается зашифрованное соединение. Данные, передаваемые по нему, шифруются и расшифровываются до тех пор, пока соединение не будет разорвано.

Что такое SSL? IT, Ssl, Хостинг, Познавательно, Длиннопост

Для чего это может понадобиться мне лично?

Почти все мы используем социальные сети. Электронную почту. Сайты с авторизацией. Он-лайн магазины, в которых оплачиваем покупки пластиковыми картами.


Теперь представьте, что данные, которые вы вводите в форме на сайте будут передаваться с вашего компьютера на сервер для их последующей обработки в открытом виде. Если кто-то получит доступ к любому из промежуточных узлов передачи данных, то он сможет увидеть эти данные. Например, сотрудники вашего интернет-провайдера имеют доступ к маршутизаторам, через которые ходят данные от вас во внешнюю сеть и обратно. Соответственно, весь ваш траффик у них может быть как на ладони. И если речь о логине и пароле от вконтактика, то, может быть, и невелика потеря. Но если это, например, номер вашей пластиковой карты и её CVV-код? Можно остаться и без кровно заработанных.


Поэтому передача данных в Сети через шифрованные протоколы очень важна и нужна.


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


Благодарю за внимание. Если появились вопросы, задавайте в комментариях, попробую ответить.