Протокол https для чего нужен
Как протокол HTTPS защищает данные и как его установить?
Протокол HTTPS по праву считают ключевой технологией современного интернета и настоящим must have для любого сайта, который заботится о безопасности личных данных своих пользователей. В нашей новой статье вы прочтете о том, что такое HTTPS, чем он отличается от другого популярного стандарта HTTP, как он работает, зачем нужен и как внедрить его на свой сайт?
HTTPS – что это за протокол?
HTTPS – это защищенный протокол передачи гипертекста, который обеспечивает зашифрованную передачу данных между сервером сайта и его пользователями. В качестве инструментов шифрования в этом стандарте используются протоколы SSL/TLS, защищающие информацию методами криптографии.
Как известно, в основе принципа действия интернета находится HTTP – протокол передачи гипертекста. Это технология обмена данными между клиентом (пользователем) и сервером (сайтом): клиент отправляет на сервер запрос и тем самым инициирует интернет-соединение. Сервер же получает запрос, обрабатывает его и возвращает клиенту результат, позволяя открыть сайт или выполнить какое-либо действие на нем.
В процессе обмена данными между клиентом и сервером они могут стать доступны третьим лицам: начиная от злоумышленников-хакеров (которые хотят целенаправленно завладеть ими) и заканчивая интернет-провайдером или администратором сети. Для устранения подобных рисков протокол HTTP был усовершенствован – к нему добавили специальное расширение для шифрования соединения, после чего он получил название HTTPS (secured – защищенный). Обмен данными по зашифрованному протоколу проходит через порт 443, в то время как незащищенный протокол HTTP использует порт 80.
Таким образом, HTTPS – это не отдельный новый протокол, а тот же самый классический протокол HTTP, но защищенный криптографией. Он обеспечивает три важных принципа, позволяя шифровать (защищать от перехвата), сохранять (фиксировать любые изменения) и аутентифицировать (предотвращать перенаправление клиента) данные. Это и есть те самые 3 уровня защиты, благодаря которым HTTPS стал обязательным условием безопасности любых современных сайтов.
Как работает безопасное подключение HTTPS?
Когда пользователь вводит адрес сайта, его браузер отправляет на сервер сайта запрос о предоставлении его SSL-сертификата. В ответ сервер отправляет сертификат, после чего браузер верифицирует его в центре сертификации. На следующем этапе браузер и сервер «договариваются» шифровать соединение при помощи общего одноразового ассиметричного ключа, который создается автоматически при каждом входе на сайт. В итоге защищенное HTTPS взаимодействие между сайтом и браузерами посетителей шифруется криптографией. Даже если кто-либо посторонний перехватит эти данные, то он не сможет ими воспользоваться, так как они передаются в виде шифра.
Важнейшим фактором надежности и безопасности HTTPS считается проверка подлинности сертификата сайта – SSL аутентификация. Для того, чтобы сделать свой сайт защищенным, его владелец должен получить SSL сертификат, а затем загрузить его на сервер. Его выдают специальные центры сертификации, они же и верифицируют сертификат при запросе браузеров пользователей. Без верификации SSL считаются недействительными – если браузер не получит подтверждение от центра сертификации, то просто не даст пользователю зайти на этот сайт.
Виды SSL сертификатов
На сегодняшний день существует несколько видов SSL/TLS сертификатов:
Зачем и кому нужно шифрование данных HTTPS?
Итак, мы узнали, что такое HTTPS и как он защищает данные пользователей, но какие преимущества он дает владельцам сайтов и кому он нужен обязательно?
Если деятельность вашего сайта связана с обработкой персональных или тем более финансовых данных пользователей, то вы обязаны обеспечить их защиту – иначе вам не будут доверять. Например, многие посетители не рискнут даже регистрироваться (вводить логин и пароль) без безопасного подключения к сайту, не говоря уже о том, что чтобы указывать там цифры своей банковской карты для оплаты товара.
Более того, современные интернет-браузеры тщательно следят за наличием SSL сертификата сайтов. При попытке открытия сайта без ХТТПС любой браузер (Google Chrome, Mozilla Firefox и т.д.) сначала предупредит о том, что соединение будет незашифровано и его данные могут стать доступны посторонним.
Наличие HTTPS также положительно влияет на SEO-оптимизацию: поисковые системы учитывают наличие SSL сертификата, поэтому наличие безопасного подключения является важным фактором ранжирования сайтов.
Заключение: HTTPS – безопасное подключение к сайту
HTTPS – это усовершенствованная версия протокола передачи гипертекста HTTP, которая помогает шифровать передаваемые через него данные. Она обеспечивает безопасное подключение пользователей к сайту и защищает их персональную и финансовую информацию.
Для перехода на HTTPS владелец сайта должен получить и загрузить специальный SSL/TLS сертификат, который имеет несколько разновидностей с разной степенью защиты. Протокол HTTPS является почти обязательным стандартом для современных сайтов, особенно интернет-магазинов или других сайтов с опциями регистрации пользователей и онлайн-оплаты.
Время — самый ценный ресурс в современных бизнес-реалиях. Исключив из рабочих процессов рутину, вы получите больше возможностей для реализации самых смелых планов и идей. Выбирайте – можете дальше терять время, деньги и нервы на неэффективные решения, а можете воспользоваться ApiX-Drive, автоматизировав рабочие процессы и достигая результатов с минимальными инвестициями денег, сил и кадровых ресурсов.
Как перейти на HTTPS правильно: зачем, когда и как по шагам
В статье:
Поисковые системы лучше воспринимают сайты с HTTPS-протоколом, а еще протокол защищает данные пользователей от мошенников. В статье пошагово рассказываем, как перейти с HTTP на HTTPS и зачем это делать.
Что такое HTTPS и для чего он нужен
Что такое HTTPS
HTTPS (HyperText Transfer Protocol Secure) — это расширение HTTP-протокола, его используют, чтобы защитить от мошенников конфиденциальные данные, которые пользователи вводят на сайте. Сайтам с протоколом HTTPS доверяют больше, потому что пользоваться им безопаснее.
С июля 2018 года в браузере Google Chrome 68 все сайты с HTTP будут иметь пометку как ненадежные, как написано в блоге компании. Этот браузер довольно популярен, так что стоит озаботиться переходом на HTTPS, чтобы избежать пометки.
У небезопасных сайтов появится пометка
Судя по росту показателей с каждым годом, процесс перехода сайтов будет продолжаться.
Чем HTTPS отличается от HTTP
Протокол SSL (Secure Sockets Layer) нужен для защиты данных, он гарантирует безопасное соединение браузера пользователя и сервера. Для него требуется установка SSL-сертификата.
1.Шифрование. Данные шифруются, чтобы злоумышленники не смогли узнать, какую информацию передают посетители, и перехватить ее.
2.Сохранность. Все намеренные или ненамеренные изменения данных фиксируются.
3.Аутентификация. Пользователи попадут именно на тот сайт, который им нужен,и будут защищены от атаки посредника.
Зачем нужен HTTPS-протокол
Рекомендуем переход на HTTPS, потому что это даст преимущества перед HTTP:
Обязательно переходить на HTTPS нужно в первую очередь сайтам, на которых вводятся личные данные: платежные реквизиты, регистрационные данные и так далее. Это нужно, чтобы обезопасить данные пользователей от перехвата мошенниками.
HTTPS делает пользование сайтом безопаснее и влияет на ранжирование, к тому же все ресурсы постепенно переходят на этот протокол, а поисковики это поощряют. Значит, пора переводить и свой сайт.
Как перейти на HTTPS
Выбор времени перехода
Для начала нужно выбрать время перехода. Переход на новый протокол может обрушить позиции сайта в выдаче на некоторое время, так что лучше не переводить сайт на HTTPS в период, когда им активнее всего пользуются. Пусть это будет, когда у сайта «не сезон», и он пользуется наименьшим спросом.
Подготовка сайта к переходу
Если сайт предварительно не подготовить, могут возникнуть технические проблемы или время всей операции затянется. Как подготовить сайт к переходу на HTTPS:
Заложите на подготовку срок с запасом, потому что на эти преобразования может понадобиться долгое время, особенно если у вас большой сайт.
Покупка и установка SSL-сертификата
Для работы SSL-протокола необходим SSL-сертификат, для этого нужно его купить и установить.
Какой SSL-сертификат выбрать
Обычно они покупаются у поставщиков, цена установки SSL-сертификата может быть разной, но есть бесплатные варианты. Бесплатно сертификат найти сложно и небезопасно, тем более обычно они действуют ограниченный период. Советуем выбрать поставщика и приобрести сертификат, так надежнее. Бывает, что их дарят при регистрации домена.
Переходим на страницу заказа SSL-сертификатов и выбираем нужный тип:
Визуально у сайта появится замочек в адресной строке.
Сайт с сертификатом безопасности
Этот сертификат подходит порталам, магазинам, компаниям, предоставляющим услуги..
Визуально такая форма будет выглядеть как DV-сертификат.
Сайт с сертификатом безопасности
Этот сертификат обычно заказывают банки и крупные организации.
Визуальное отличие в том, что кроме замочка в адресной строке появится зеленое поле с названием фирмы. Такая форма выглядит надежнее.
Сайт с сертификатом и дополнительной формой
Первый вариант сертификата бюджетнее и его проще получить. После того, как мы подобрали нужный вид сертификата, заказываем его, а после выпуска скачиваем готовый файл. При заказе при генерации CSR-запроса вам выдадут файл ключа, сохраните его, он понадобится для установки.
После покупки нужно установить SSL на хостинг, если вы покупали сертификат у своего хостера, это будет чуть проще.
Сертификат обычно покупается как домен или хостинг: на год-два, а потом продлевается.
Как установить SSL-сертификат
После покупки у вас должен быть файл сертификата, файл ключа и два файла цепочки сертификатов.
1.Войдите в личный кабинет хостинга вашего сайта.
2.Найдите раздел SSL.
3. Загрузите эти файлы в соответствующие поля.
На сайтах, где можно купить файл, обычно есть подробная инструкция как установить SSL-сертификат.
Загрузка сертификата на reg.ru
4. Проверьте, доступен ли сайт по по HTTP-протоколу и по HTTPS. Он должен быть доступен по обоим.
5. Проверьте корректность установки сертификата на сайте: страницы сайта корректно открываются по URL с учётом нового протокола, а конфигурация SSL корректно установлена. Проверить правильность конфигурации SSL-сертификата можно на сервисе PR-CY: вставьте адрес сайта в строку и нажмите проверку. Если установка прошла корректно, появится примерно это:
Результаты проверки SSL
Проверить настройку также можно с помощью Ssllabs, сервис проведет анализ конфигурации SSL. Вводите адрес сайта и нажимаете проверку, если все в порядке, появится такой результат:
Успешный результат проверки
Если сервисы покажут некорректную настройку, они определят проблемы и дадут рекомендации по их устранению.
Рекомендуем также проверить отображение сайта через разные браузеры, а также на мобильных устройствах на разных операционных системах.
SSL-сертификат установлен, но выдыхать рано – нужно провести еще некоторые манипуляции в коде сайта и его настройках.
Завершение перехода с HTTP на HTTPS
Проводим техническую настройку
После установки у вас впереди склейка зеркал, то есть копий сайта. Ссылочный вес нужно будет перенести на главное зеркало, это можно сделать в кабинетах вебмастеров поисковиков. Переход займет большое количество времени – до нескольких месяцев. Придется потерпеть, ускорить процесс никак нельзя, мы проверяли.
Пока идет склейка, сайт нужно оставить доступным по обоим адресам. При доступности обеих версий Google сразу будет показывать версию с HTTPS, а Яндекс будет делать это после склейки.
Кроме того, нужны некоторые завершающие действия:
1.Настройте постраничный 301 редирект.
Когда склейка завершится, следует настроить постраничный 301 редирект на страницы с новым протоколом.
Код должен сработать для большинства серверов, если для вашего он не подошел, проконсультируйтесь с хостером.
2.Настройте robots.txt, чтобы роботы индексировали сайт только по одному новому протоколу, то есть укажите, что версия с HTTPS — главная. Для этого в файле robots в директиве host добавьте https://.
3.Настройте sitemap.xml, аналогично добавив https://.
4. Проверьте rel=»canonical» и rel=»alternate», там также должны быть ссылки с HTTPS.
5. Поработайте со внутренними ссылками, включая URL всех статических файлов. В HTML-коде абсолютных ссылок замените HTTP на HTTPS.
Это можно сделать при помощи специальных скриптов, но если вы не ищете легких путей, то вполне можно сделать и вручную. Для объемных ресурсов можно использовать также сервисы SEO-анализа сайтов.
6. Настройте метатег для реферального трафика.
Если на вашем сайте есть рекламные баннеры, ведущие на сайты без HTTPS, то метрики могут не распознавать ваш сайт с сертификатом как источник трафика. Переходы на такие сайты с вашего ресурса Яндекс.Метрика или Google Analytics могут относить к прямому трафику.
Теперь об изменениях нужно оповестить поисковики – они должны быть в курсе смены протокола.
Оповещаем Яндекс и Google о смене протокола
Оповещаем поисковики. Яндексу о смене протокола можно рассказать здесь:
Сделайте пометку на добавлении HTTPS
Нужно добавить сайт с новым протоколом в Search Console
Добавьте в Search Console адрес сайта, использующего HTTPS. Помните, что Search Console расценивает страницы HTTP и HTTPS как разные, поэтому их данные не совпадают. Если на вашем сайте используются оба протокола, то в Search Console следует добавить два ресурса.
Основные действия вы завершили, теперь остается только ждать. И готовиться к снижению трафика и ТИЦ – при переходе это нормальная история. Не бойтесь, со временем позиции восстановятся и скорее всего улучшатся, благо лояльность поисковиков к HTTPS сайтам только повышается день ото дня.
Теги поста или какие разделы почитать еще:
В данный момент есть препятствия в виде хостингов, которые не спешат внедрять полноценную поддержку сертификатов Lets Encrypt. Поэтому https сайты сильно ограничены в выборе хостинга без переплаты за сертификат. Тем не менее beget и timeweb уже внедрили такой функционал. У первого ещё и до кучи протокол http 2, который сводит к минимуму разницу в скорости загрузки http и https сайтов.
При этом многие хостинги заявляют, что поддерживают Lets Encrypt. Но:
1. Многие из них не поддерживают автоматический выпуск сертификата
2. Многие из них не поддерживают автопродление данного сертификата
3. Многие из них требуют покупать выделенный ip-адрес, хотя технология SNI не требует выделенного ip-адреса для Lets Encrypt
К счастью, перечисленные мной хостинги не имеют указанных проблем. На них использование https ни стоит ни копейки(исключение составляют интернет магазины, потому что яндекс кассы и прочие секурные сервисы не работают через SNI и для их работы требуется выделенный ip). Скоро и другие хостинги подтягиваться начнут, когда от них побегут клиенты. Пока же я встречаю негатив от ТП хостингов, задавая вопросы про Lets Encrypt
В современных реалиях переход с HTTP на HTTPS череват потерей позиций, и каждый сам решает, делать такой переход или нет.
Что касается новых доменов то для них обязательно нужно подключать https. Они не рискуют трафиком, но могут быть пессимизированы ПС в будущем, если останутся на небезопасном протоколе.
Почему сайту нужен HTTPS
По состоянию на июль 2019 года, более 50% всех сайтов используют протокол HTTPS. И количество этих сайтов увеличивается. Это четко прослеживается в приведенном ниже графике.
Но остается еще 47% площадок, развернутых на HTTP. Что слишком много. Именно это вдохновило меня на написание данного руководства.
Что такое HTTPS?
Протокол HTTP используется для передачи информации, представленной на веб-странице, с сервера в браузер. Когда пользователь переходит по URL, браузер связывается с сервером, на котором располагается сайт и загружает необходимую для отображения веб-страницы информацию.
При использовании протокола HTTP данные пересылаются в текстовом формате, и любой сторонний пользователь может получить доступ к соединению и конфиденциальная информации.
Чтобы защитить передаваемые данные, нужно применять протокол HTTPS – более безопасная версия HTTP. При использовании HTTPS передаваемая между сервером и браузером информация надежно шифруется.
Преимущества HTTPS
HTTPS использует TLS (протокол защиты транспортного уровня) или SSL (криптографический протокол) для шифрования. Уникальные ключи шифрования передаются между браузером и сервером для обеспечения безопасной связи.
Преимущества использования HTTPS:
Каждый раз, когда вы планируете внести изменения в свой сайт, вам нужно
Еще в 2014 г. Google объявил, что использование HTTPS станет фактором ранжирования. Поэтому поисковик рекомендует всем вебмастерам, использовать протокол HTTPS.
Перейдя с HTTP на HTTPS, вы получите более высокие позиции в выдаче Google.
Несколько лет назад Брайан Дин проанализировал 1 миллион результатов поиска в Google. В результате он обнаружил зависимость между использованием сайтами протокола HTTPS и их позицией в Google.
Сайты на HTTPS занимают более высокие позиции в поисковой выдаче Google.
Безопасность пользователя
Но важнее всего для сайта – это обеспечение конфиденциальности и безопасности его пользователей. Для этого необходимо использовать HTTPS.
Это особенно важно для площадок, которые обрабатывают конфиденциальную пользовательскую информацию: имена, адреса и платежные реквизиты банковских карт.
Доверие
Важно, чтобы люди доверяли вашему сайту. Сейчас популярные браузеры начали предупреждать пользователей о небезопасности того или иного ресурса.
Посмотрите на сообщение, которое выводит Google Chrome, если пользователь попытается посетить сайт, который не использует HTTPS.
Пользователи браузера Safari, также увидят подобное предупреждение при попытке посещения незащищенных сайтов.
Посмотрим, что произойдет, если в браузере Firefox перейти на небезопасный ресурс.
Переход на HTTPS повысит доверие к вашему сайту, потому что браузеры не будут выдавать подобные предупреждения.
Генерация лидов и конверсии
Если сайт использует протокол HTTP, пользователи неохотно будут переходить на него и заполнять формы. HTTPS позволит посетителям чувствовать себя более уверенно, и вы сможете получить больше потенциальных клиентов.
Вот пример безопасной страницы оплаты.
В адресной строке браузера рядом с HTTPS отображается значок блокировки. Это еще один показатель безопасности сайта для пользователей.
Если нажать на иконку, то получите подробную информацию о том, что пароли и данные банковских карт отправляются через защищенное соединение.
Как перевести сайт на HTTPS
Шаг № 1: Купите SSL- сертификат
Многие хостинги предоставляют бесплатный SSL- сертификат. Это дополнительный стимул для веб-мастеров пользоваться услугами этих хостинг-провайдеров.
Шаг № 2: Установите сертификат
Настройте сайт и установите SSL-сертификат на сервере. Если у вас нет опыта, я бы не рекомендовал делать это самостоятельно. Подобная услуга может быть включена в используемый тарифный план хостинга.
Шаг № 3: Протестируйте сайт на наличие ошибок
Убедитесь в том, что все было сделано правильно. Чаще всего ошибки возникают, если веб-страница ссылается на ресурсы с URL не на HTTPS.
Шаг № 4: Уведомите Google
Сообщите Google, что вы перешли на HTTPS. Это можно сделать через Search Console. Затем обновите настройки Google Analytics.
Заключение
Использование протокола HTTPS улучшает SEO, повышает безопасность сайта и доверие со стороны пользователей. Переход на HTTPS также позволит увеличить количество лидов и улучшит конверсию.
Перевести сайт на HTTPS достаточно просто. Следуйте простому процессу, состоящему из четырех этапов, который я описал выше.
К тому же бесплатный SSL-сертификат можно получить не только от хостера, но и на некоторых платформах электронной коммерции. Wix, Squarespace, Weebly, Shopify и BigCommerce – это лишь несколько из них.
Дайте знать, что вы думаете по этой теме статьи в комментариях. Мы очень благодарим вас за ваши комментарии, отклики, лайки, дизлайки, подписки!
Пожалуйста, оставляйте ваши комментарии по текущей теме статьи. Мы очень благодарим вас за ваши комментарии, отклики, лайки, дизлайки, подписки!
Как HTTPS обеспечивает безопасность соединения: что должен знать каждый Web-разработчик
Как же все-таки работает HTTPS? Это вопрос, над которым я бился несколько дней в своем рабочем проекте.
Будучи Web-разработчиком, я понимал, что использование HTTPS для защиты пользовательских данных – это очень и очень хорошая идея, но у меня никогда не было кристального понимания, как HTTPS на самом деле устроен.
Как данные защищаются? Как клиент и сервер могут установить безопасное соединение, если кто-то уже прослушивает их канал? Что такое сертификат безопасности и почему я должен кому-то платить, чтобы получить его?
Трубопровод
Перед тем как мы погрузимся в то, как это работает, давайте коротко поговорим о том, почему так важно защищать Интернет-соединения и от чего защищает HTTPS.
Когда браузер делает запрос к Вашему любимому веб-сайту, этот запрос должен пройти через множество различных сетей, любая из которых может быть потенциально использована для прослушивания или для вмешательства в установленное соединение.
С вашего собственного компьютера на другие компьютеры вашей локальной сети, через роутеры и свитчи, через вашего провайдера и через множество других промежуточных провайдеров – огромное количество организаций ретранслирует ваши данные. Если злоумышленник окажется хотя бы в одной из них — у него есть возможность посмотреть, какие данные передаются.
Как правило, запросы передаются посредством обычного HTTP, в котором и запрос клиента, и ответ сервера передаются в открытом виде. И есть множество весомых аргументов, почему HTTP не использует шифрование по умолчанию:
• Для этого требуется больше вычислительных мощностей
• Передается больше данных
• Нельзя использовать кеширование
Но в некоторых случаях, когда по каналу связи передается исключительно важная информация (такая как, пароли или данные кредитных карт), необходимо обеспечить дополнительные меры, предотвращающие прослушивание таких соединений.
Transport Layer Security (TLS)
Сейчас мы собираемся погрузиться в мир криптографии, но нам не потребуется для этого какого-то особенного опыта — мы рассмотрим только самые общие вопросы. Итак, криптография позволяет защитить соединение от потенциальных злоумышленников, которые хотят воздействовать на соединение или просто прослушивать его.
TLS — наследник SSL — это такой протокол, наиболее часто применяемый для обеспечения безопасного HTTP соединения (так называемого HTTPS). TLS расположен на уровень ниже протокола HTTP в модели OSI. Объясняя на пальцах, это означает, что в процессе выполнения запроса сперва происходят все “вещи”, связанные с TLS-соединением и уже потом, все что связано с HTTP-соединением.
TLS – гибридная криптографическая система. Это означает, что она использует несколько криптографических подходов, которые мы и рассмотрим далее:
1) Асиметричное шифрование (криптосистема с открытым ключом) для генерации общего секретного ключа и аутентификации (то есть удостоверения в том, что вы – тот за кого себя выдаете).
2) Симметричное шифрование, использующее секретный ключ для дальнейшего шифрования запросов и ответов.
Криптосистема с открытым ключом
Криптосистема с открытым ключом – это разновидность криптографической системы, когда у каждой стороны есть и открытый, и закрытый ключ, математически связанные между собой. Открытый ключ используется для шифрования текста сообщения в “тарабарщину”, в то время как закрытый ключ используется для дешифрования и получения исходного текста.
С тех пор как сообщение было зашифровано с помощью открытого ключа, оно может быть расшифровано только соответствующим ему закрытым ключом. Ни один из ключей не может выполнять обе функции. Открытый ключ публикуется в открытом доступе без риска подвергнуть систему угрозам, но закрытый ключ не должен попасть к кому-либо, не имеющему прав на дешифровку данных. Итак, мы имеем ключи – открытый и закрытый. Одним из наиболее впечатляющих достоинств ассиметричного шифрования является то, что две стороны, ранее совершенно не знающие друг друга, могут установить защищенное соединение, изначально обмениваясь данными по открытому, незащищенному соединению.
Клиент и сервер используют свои собственные закрытые ключи (каждый – свой) и опубликованный открытый ключ для создания общего секретного ключа на сессию.
Это означает, что если кто-нибудь находится между клиентом и сервером и наблюдает за соединением – он все равно не сможет узнать ни закрытый ключ клиента, ни закрытый ключ сервера, ни секретный ключ сессии.
Как это возможно? Математика!
Алгоритм Ди́ффи — Хе́ллмана
Одним из наиболее распространенных подходов является алгоритм обмена ключами Ди́ффи — Хе́ллмана (DH). Этот алгоритм позволяет клиенту и серверу договориться по поводу общего секретного ключа, без необходимости передачи секретного ключа по соединению. Таким образом, злоумышленники, прослушивающие канал, не смогу определить секретный ключ, даже если они будут перехватывать все пакеты данных без исключения.
Как только произошел обмен ключами по DH-алгоритму, полученный секретный ключ может использоваться для шифрования дальнейшего соединения в рамках данной сессии, используя намного более простое симметричное шифрование.
Немного математики…
Математические функции, лежащие в основе этого алгоритма, имею важную отличительную особенность — они относительно просто вычисляются в прямом направлении, но практически не вычисляются в обратном. Это именно та область, где в игру вступают очень большие простые числа.
Пусть Алиса и Боб – две стороны, осуществляющие обмен ключами по DH-алгоритму. Сперва они договариваются о некотором основании root (обычно маленьком числе, таком как 2,3 или 5 ) и об очень большом простом числе prime (больше чем 300 цифр). Оба значения пересылаются в открытом виде по каналу связи, без угрозы компрометировать соединение.
Напомним, что и у Алисы, и у Боба есть собственные закрытые ключи (из более чем 100 цифр), которые никогда не передаются по каналам связи.
По каналу связи же передается смесь mixture, полученная из закрытых ключей, а также значений prime и root.
Таким образом:
Alice’s mixture = (root ^ Alice’s Secret) % prime
Bob’s mixture = (root ^ Bob’s Secret) % prime
где % — остаток от деления
Таким образом, Алиса создает свою смесь mixture на основе утвержденных значений констант (root и prime), Боб делает то же самое. Как только они получили значения mixture друг друга, они производят дополнительные математические операции для получения закрытого ключа сессии. А именно:
Вычисления Алисы
(Bob’s mixture ^ Alice’s Secret) % prime
Вычисления Боба
(Alice’s mixture ^ Bob’s Secret) % prime
Результатом этих операций является одно и то же число, как для Алисы, так и для Боба, и это число и становится закрытым ключом на данную сессию. Обратите внимание, что ни одна из сторон не должна была пересылать свой закрытый ключ по каналу связи, и полученный секретный ключ так же не передавался по открытому соединению. Великолепно!
Для тех, кто меньше подкован в математическом плане, Wikipedia дает прекрасную картинку, объясняющую данный процесс на примере смешивания цветов:
Обратите внимание как начальный цвет (желтый) в итоге превращается в один и тот же “смешанный” цвет и у Боба, и у Алисы. Единственное, что передается по открытому каналу связи так это наполовину смешанные цвета, на самом деле бессмысленные для любого прослушивающего канал связи.
Симметричное шифрование
Обмен ключами происходит всего один раз за сессию, во время установления соединения. Когда же стороны уже договорились о секретном ключе, клиент-серверное взаимодействие происходит с помощью симметричного шифрования, которое намного эффективнее для передачи информации, поскольку не требуется дополнительные издержки на подтверждения.
Используя секретный ключ, полученный ранее, а также договорившись по поводу режима шифрования, клиент и сервер могут безопасно обмениваться данными, шифруя и дешифруя сообщения, полученные друг от друга с использованием секретного ключа. Злоумышленник, подключившийся каналу, будет видеть лишь “мусор”, гуляющий по сети взад-вперед.
Аутентификация
Алгоритм Диффи-Хеллмана позволяет двум сторонам получить закрытый секретный ключ. Но откуда обе стороны могут уверены, что разговаривают действительно друг с другом? Мы еще не говорили об аутентификации.
Что если я позвоню своему приятелю, мы осуществим DH-обмен ключами, но вдруг окажется, что мой звонок был перехвачен и на самом деле я общался с кем-то другим?! Я по прежнему смогу безопасно общаться с этим человеком – никто больше не сможет нас прослушать – но это будет совсем не тот, с кем я думаю, что общаюсь. Это не слишком безопасно!
Для решения проблемы аутентификации, нам нужна Инфраструктура открытых ключей, позволяющая быть уверенным, что субъекты являются теми за кого себя выдают. Эта инфраструктура создана для создания, управления, распространения и отзыва цифровых сертификатов. Сертификаты – это те раздражающие штуки, за которые нужно платить, чтобы сайт работал по HTTPS.
Но, на самом деле, что это за сертификат, и как он предоставляет нам безопасность?
Сертификаты
В самом грубом приближении, цифровой сертификат – это файл, использующий электронной-цифровую подпись (подробнее об этом через минуту) и связывающий открытый (публичный) ключ компьютера с его принадлежностью. Цифровая подпись на сертификате означает, что некто удостоверяет тот факт, что данный открытый ключ принадлежит определенному лицу или организации.
По сути, сертификаты связывают доменные имена с определенным публичным ключом. Это предотвращает возможность того, что злоумышленник предоставит свой публичный ключ, выдавая себя за сервер, к которому обращается клиент.
В примере с телефоном, приведенном выше, хакер может попытаться предъявить мне свой публичный ключ, выдавая себя за моего друга – но подпись на его сертификате не будет принадлежать тому, кому я доверяю.
Чтобы сертификату доверял любой веб-браузер, он должен быть подписан аккредитованным удостоверяющим центром (центром сертификации, Certificate Authority, CA). CA – это компании, выполняющие ручную проверку, того что лицо, пытающееся получить сертификат, удовлетворяет следующим двум условиям:
1. является реально существующим;
2. имеет доступ к домену, сертификат для которого оно пытается получить.
Как только CA удостоверяется в том, что заявитель – реальный и он реально контролирует домен, CA подписывает сертификат для этого сайта, по сути, устанавливая штамп подтверждения на том факте, что публичный ключ сайта действительно принадлежит ему и ему можно доверять.
В ваш браузер уже изначально предзагружен список аккредитованных CA. Если сервер возвращает сертификат, не подписанный аккредитованным CA, то появится большое красное предупреждение. В противном случае, каждый мог бы подписывать фиктивные сертификаты.
Так что даже если хакер взял открытый ключ своего сервера и сгенерировал цифровой сертификат, подтверждающий что этот публичный ключ, ассоциирован с сайтом facebook.com, браузер не поверит в это, поскольку сертификат не подписан аккредитованным CA.
Прочие вещи которые нужно знать о сертификатах
Расширенная валидация
В дополнение к обычным X.509 сертификатам, существуют Extended validation сертификаты, обеспечивающие более высокий уровень доверия. Выдавая такой сертификат, CA совершает еще больше проверок в отношении лица, получающего сертификат (обычно используя паспортные данные или счета).
При получение такого сертификата, браузер отображает в адресной строке зеленую плашку, в дополнение к обычной иконке с замочком.
Обслуживание множества веб-сайтов на одном сервере
Поскольку обмен данными по протоколу TLS происходит еще до начала HTTP соединения, могут возникать проблемы в случае, если несколько веб-сайтов расположены на одном и том же веб-сервере, по тому же IP-адресу. Роутинг виртуальных хостов осуществляется веб-сервером, но TLS-соединение возникает еще раньше. Единый сертификат на весь сервер будет использоваться при запросе к любому сайту, расположенному на сервере, что может вызвать проблемы на серверах с множеством хостов.
Если вы пользуетесь услугами веб-хостинга, то скорее всего вам потребуется приобрести выделенный IP-адрес, для того чтобы вы могли использовать у себя HTTPS. В противном случае вам придется постоянно получать новые сертификаты (и верифицировать их) при каждом обновлении сайта.
По этой теме много данных есть в википедии, есть курс на Coursera. Отдельное спасибо ребятам из чата на security.stackexchange.com, которые отвечали на мои вопросы сегодня утром.
1)Спасибо хабраюзеру wowkin за отличную ссылку по теме (видео переведено и озвученно хабраюзером freetonik):
2) По результатам развернувшейся в коменатариях дискуссии (спасибо за участие хабраюзерам a5b, Foggy4 и Allen) дополняю основную статью следующей информацией:
По данным netcraft на базе свежего SSL survey (2.4 млн SSL сайтов, июнь 2013), большинство SSL соединений не используют Perfect forward secrecy алгоритмы: news.netcraft.com/archives/2013/06/25/ssl-intercepted-today-decrypted-tomorrow.html
Особенно ситуация плоха в случае с IE (даже 10 версии), который поддерживает Диффи-Хеллмана только на эллиптических кривых (RSA и ECDSA сертификаты), либо классический Диффи-Хеллман с более редкими сертификатами DSS (DSA).
По подсчетам netcraft 99,7 % соединений с IE и по 66% — с Chrome, Opera и Firefox не будут использовать Диффи-Хеллмана.
На Hacker News в обсуждении это тоже заметили.
Also (and I made the same mistake in my talk. ), yes, explaining DH is important, but now it kind of sounds like in TLS both sides figure out the master secret using DH (and, in your talk, specifically, regular DH, not EC-based DH), when in reality that depends on the ciphersuite, and the vast majority of TLS connections don’t work that way. From what I understand to be most TLS configurations in the wild, the pre-master secret is encrypted using the server’s public key. (RFC 5246: 7.4.7.1, 8.1.1)