Что прячется за тремя буквами SSL
Если совсем просто,
SSL (Secure Sockets Layer) — это криптографический протокол, который отвечает за шифрование, целостность и аутентификацию данных при их путешествии по сети. Место его обитания в модели OSI — где-то между транспортным и прикладным уровнями: он забирает информацию у приложения (того же браузера), упаковывает ее в зашифрованный вид и отправляет дальше по маршруту.
Сам протокол придумали в компании Netscape еще в 1994 году. Последней версией стала SSL 3.0 — она вышла в 1996-м, после чего эстафету подхватил уже более надежный наследник. И все же аббревиатура прижилась настолько крепко, что я по привычке называю так любую похожую технологию шифрования, хотя технически речь давно идет уже не о ней.
Кстати, применяют его не только для сайтов. С помощью такого шифрования защищают почтовые соединения, IP-телефонию, VPN-туннели — словом, любой обмен данными, где для меня важна конфиденциальность.
SSL и TLS: в чем разница и почему их часто путают
Чтобы понять, что такое SSL TLS и почему два названия постоянно ходят парой, я обычно смотрю на хронологию. В 1999 году на базе SSL 3.0 вышел новый протокол — TLS (Transport Layer Security). По сути, это та же самая технология, только переработанная: с более стойкими алгоритмами, расширенным набором кодов предупреждений и закрытыми дырами предшественника.
Сегодня все «живые» соединения, к которым я подключаюсь, работают именно через TLS — актуальная версия 1.3 появилась еще в 2018 году. А вот SSL официально считается устаревшим и небезопасным: в нем обнаружили целый букет громких уязвимостей вроде POODLE, BEAST и Heartbleed, через которые можно было атаковать вроде бы зашифрованный трафик.
При этом по привычке индустрия по-прежнему называет все «SSL» — и сертификаты, и соединения, и сам протокол. Так что когда мне говорят «установите SSL на сайт», на деле речь идет о работе по TLS, просто под старым именем.
Ключевые отличия двух протоколов я для удобства собрал в табличку:
| Параметр | SSL | TLS |
| Год выпуска | 1995–1996 | 1999–2018 |
| Актуальность | устарел, не используется | актуальный стандарт |
| Алгоритмы шифрования | DES, RC4 | AES, ChaCha20 |
| Безопасность | есть критические уязвимости | устранены и продолжают улучшаться |
| Скорость handshake | медленнее | быстрее, особенно в TLS 1.3 |
Зачем сайту SSL-сертификат
С идеей разобрались — теперь о том, что такое SSL сертификат на практике и какие задачи он реально закрывает.
Сертификат — это электронный документ, привязанный к конкретному домену. Он подтверждает, что сайт и правда принадлежит заявленному владельцу или организации. Без него браузер просто не сможет установить защищенное соединение и будет встречать меня грозным предупреждением «Подключение не защищено».
Основные задачи сертификата я для себя сформулировал так:
- Шифрование трафика. Логины, пароли, номера карт, переписка — все это идет по сети в зашифрованном виде и недоступно посторонним.
- Аутентификация сайта. Я точно знаю, что попал на настоящий ресурс, а не на фишинговую подделку.
- Целостность данных. Любая попытка подменить пакет «на лету» будет замечена, и соединение тут же оборвется.
- Работа по HTTPS. Без сертификата перейти с HTTP на защищенный HTTPS попросту не получится.
Без сертификата современный браузер превращает поход на сайт в полосу препятствий: красные иконки, всплывающие предупреждения, заблокированные формы. Будь я владельцем коммерческого ресурса, это бы означало одно — потерю клиентов еще на пороге.
Рукопожатие: как клиент и сервер договариваются о шифровании
Самый интересный этап в работе протокола — так называемое «рукопожатие» (handshake). Это короткая, но насыщенная переписка между браузером и сервером, во время которой они договариваются, как именно будут шифровать дальнейший разговор.
Если упростить, выглядит это так:
- Запрос на соединение. Браузер обращается к серверу и перечисляет, какие версии протокола и алгоритмы шифрования он поддерживает.
- Отправка сертификата. Сервер в ответ отправляет свой сертификат — с публичным ключом и подписью центра сертификации.
- Проверка подлинности. Браузер придирчиво сверяет сертификат: не истек ли срок действия, выдал ли его доверенный центр, совпадает ли домен.
- Обмен сеансовым ключом. Браузер генерирует симметричный ключ, шифрует его публичным ключом сервера и отправляет обратно.
- Расшифровка ключа сервером. Сервер своим приватным ключом достает сеансовый ключ — теперь он есть только у двух участников разговора.
- Шифрованный обмен данными. Все дальнейшее общение идет уже под этим общим ключом.
Когда сессия заканчивается, ключ уничтожается, а при следующем заходе на сайт все начинается заново. Именно благодаря такой схеме перехваченный трафик не получится расшифровать постфактум — даже зная публичный ключ.
Два типа шифрования внутри одного протокола
Внутри SSL мирно уживаются сразу два класса криптографии — асимметричное и симметричное шифрование. На первый взгляд мне это казалось избыточным, но на деле такая связка дает идеальный баланс между безопасностью и скоростью.
Асимметричное шифрование использует пару ключей: публичный и приватный. Публичный ключ доступен кому угодно — им шифруют сообщение. А расшифровать его можно только парным приватным, который хранится на сервере и никуда не передается. Самый известный алгоритм этого семейства — RSA. На взлом 2048-битного ключа перебором уйдут миллионы лет даже на современных вычислительных мощностях.
Симметричное шифрование устроено проще: один ключ и для зашифровки, и для расшифровки. Минус очевиден — этот ключ нужно как-то безопасно передать второй стороне. Плюс не менее весомый: симметричные алгоритмы вроде AES работают на порядок быстрее асимметричных.
В SSL/TLS эти подходы объединены, на мой взгляд, очень изящно. Асимметричное шифрование задействуют только на этапе рукопожатия — чтобы безопасно передать общий сеансовый ключ. А весь основной трафик уже идет через симметричное, что заметно ускоряет работу.
Параллельно протокол использует хеш-функции — они превращают любой объем данных в короткую строку фиксированной длины. По этому «отпечатку» я могу мгновенно убедиться, что пакет в пути никто не подменил.
Протокол и сертификат — не одно и то же
Эти два понятия я раньше нередко путал, хотя роли у них принципиально разные. Протокол — это набор правил и последовательность действий: как именно стороны должны общаться, чтобы соединение получилось защищенным. Сертификат — это уже конкретный файл, выпущенный центром сертификации и установленный на сервер. В нем лежат публичный ключ, имя владельца, срок действия и цифровая подпись центра.
Если искать аналогию, то для меня протокол — это язык, на котором стороны разговаривают, а сертификат — паспорт, который сервер показывает в начале разговора. Без паспорта общение не начнется, но и один паспорт без знания языка тоже работать не будет. Поэтому корректнее говорить не «у сайта есть SSL», а «у сайта установлен SSL-сертификат, и работает он по протоколу TLS».
Виды сертификатов: по проверке и по охвату доменов
Сертификаты различаются по двум основным критериям — насколько строго центр сертификации проверяет владельца и сколько доменов один документ может прикрыть.
По уровню проверки я выделяю три типа:
- DV (Domain Validation) — самый простой вариант: подтверждается только факт владения доменом. Выдается буквально за несколько минут и подходит для блогов, лендингов и тестовых сред.
- OV (Organization Validation) — здесь центр сертификации дополнительно убеждается, что за сайтом стоит реально зарегистрированная организация.
- EV (Extended Validation) — высшая ступень доверия с полной проверкой юридических документов. Такой вариант традиционно выбирают банки и крупные интернет-магазины.
По охвату доменов картина такая:
- Single — защищает один конкретный домен и больше ничего.
- Wildcard — закрывает основной домен и все его поддомены любого уровня.
- Multi-Domain (SAN) — позволяет одним сертификатом покрыть до 100 разных доменов.
- UCC — отдельный подвид Multi-Domain, заточенный под почтовые сервисы Microsoft Exchange.
Чем выше уровень проверки и шире покрытие, тем дороже выходит документ — но и доверия к сайту он вызывает у меня заметно больше.
Платные сертификаты против бесплатных
На рынке спокойно сосуществуют как коммерческие сертификаты, так и бесплатные. Самая известная инициатива второго типа — Let’s Encrypt, некоммерческий центр сертификации, который выдает сертификаты автоматически и без копейки оплаты.
Бесплатные сертификаты обычно ограничиваются уровнем DV, действуют 90 дней и требуют автоматического продления. При этом они полностью обеспечивают шифрование трафика и тот самый «замочек» в адресной строке — мне этого вполне хватает для блога, портфолио или небольшого корпоративного сайта.
Платные сертификаты дают заметно больше: расширенные уровни проверки (OV и EV), финансовую гарантию на случай компрометации, поддержку специалистов центра и срок действия до года. Будь я на месте владельца интернет-магазина, финансового сервиса или любого проекта, где пользователи оставляют платежные данные, я бы выбрал именно платный вариант — повышенный кредит доверия здесь напрямую конвертируется в конверсию.
Влияние SSL на позиции в поисковой выдаче
Помимо очевидной пользы для безопасности, защищенное соединение давно превратилось в самостоятельный фактор поискового продвижения. Еще в 2014 году Google официально объявил HTTPS сигналом ранжирования: при прочих равных сайт с сертификатом будет показан в выдаче выше, чем сайт без него. Яндекс придерживается похожей логики, хотя формулирует ее мягче.
Помимо прямого влияния на ранжирование я вижу и косвенное. Современные браузеры открыто помечают незащищенные сайты предупреждениями, и процент отказов на таких страницах закономерно растет — а поведенческие факторы поисковики тоже учитывают. К тому же без HTTPS не получится использовать целый ряд современных веб-технологий: HTTP/2, сервис-воркеры, push-уведомления. В сумме все это превращает наличие сертификата уже не в опцию, а в гигиенический минимум для любого серьезного проекта.
Что в итоге
Защищенное соединение давно перестало быть привилегией банков и крупных магазинов — сегодня оно нужно даже одностраничному сайту-визитке. Технология шифрует мои данные как пользователя, подтверждает подлинность ресурса, помогает сайтам в поисковой выдаче и формирует то самое доверие, без которого онлайн-бизнес попросту не работает.
Установить сертификат сейчас можно буквально за несколько минут, а бесплатные варианты вроде Let’s Encrypt доступны любому владельцу домена. Учитывая, как мало это стоит и как много дает, аргументов остаться на незащищенном HTTP я для себя так и не нашел.
