Как настроить безопасное соединение. Значение подобного сообщения. Криптосистема с открытым ключом

  • 23.04.2019

Современные браузеры Google Chrome, Яндекс, Опера, Firefox и многие другие хорошо справляются со своими основными задачами, а разработчики этого ПО уделяют особое внимание безопасности. Иногда это доставляет пользователям определенные неудобства.

Почему возникает ошибка

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

  • Проблема с сертификатами SSL. Сайты должны их предоставлять браузерам, а когда этого не происходит, браузер «не пускает» пользователя на сайт и выдает упомянутую ошибку.
  • Браузер проверяет соединения, а когда в цепочке есть узел DNS и его по определенным причинам не удается проверить, подключение блокируется. Аналогичная ситуация возникает при VPN-соединениях или с Proxy-серверами.
  • Браузеры обрывают соединения, если на сайте нет сертификата https и нужно вводить личные данные.

Как обойти ошибку «Невозможно установить безопасное соединение»?

  • Как очистить кэш в браузере - инструкции для всех браузеров
  • Недостаточно прав для удаления, обратитесь к администратору – что делать?
  • Если вам нужно попасть на определенный сайт, но это невозможно из-за ошибки «Невозможно установить безопасное соединение», можно ее обойти. Отметим, что тем самым вы подвергнете компьютер опасности, поэтому делайте это лишь в крайних случаях. Рассмотрим алгоритм действий на примере Яндекс.Браузера:

    • Откройте настройки браузера.
    • Перейдите внизу во вкладку «Показать дополнительные настройки».
    • Найдите меню https/ssl и нажмите кнопку «Дополнительно».
    • Для обхода защиты, приводящей к ошибке, снимите галочку с пунктов «Проверка подлинности сервера» и «Доверенный ДНС-сервер».

    Дополнения браузера

    В браузерах Хром, Яндекс и многих других можно устанавливать дополнения, некоторые из которых препятствуют открытию отдельных сайтов. Попробуйте отключить все установленные дополнения и открыть сайт. Если он откроется без ошибки, начните поочередно включать дополнения, чтобы определить, какое из них блокирует доступ к интересующему вас ресурсу, и удалите его или оставьте отключенным.

    Другие способы устранения ошибки

    Возникать ошибка «Невозможно установить безопасное соединение» при открытии отдельных сайтов может и по ряду других причин. Если отключение проверки сертификатов не помогло, попробуйте сделать следующее:

    • Обновить или переустановить браузер.
    • Установить правильную дату, часовой пояс и время на компьютере.
    • Попробовать перейти на сайт из поисковой системы, а не через сохраненную закладку.
    • Иногда проблема в вирусах на жестком диске, от которых поможет избавиться антивирусная программа.

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

    Мы выпустили новую книгу «Контент-маркетинг в социальных сетях: Как засесть в голову подписчиков и влюбить их в свой бренд».

    Подписаться

    Мир помешался на интернет-безопасности. Если вы в тренде и переписываетесь исключительно в «Телеграме», то почитайте про то, как установить на сайт защищенного соединения . Он пригодится в любом случае, а если вы интернет-магазин, то без него вообще нельзя будет обойтись. Попутно расскжем про сертификаты : что это такое и для чего они нужны.

    Что такое HTTPS

    Это протокол защищенного соединения. Он шифрует информацию, которой обменивается сервер и браузер пользователя – это помогает защитить данные о паролях, номерах кредиток и адресах электронной почты. Использование HTTPS сильно и делает его немного привлекательнее в глазах поисковых систем – Google ранжирует защищенные сайты выше, чем незащищенные. Чтобы включить протокол HTTPS на своем сайте, нужно сперва установить на сервере SSL-сертификат.

    Для чего нужен сертификат SSL

    Он формирует уникальную цифровую подпись сайта, которая и помогает защитить соединение. Без сертификата SSL получить протокол HTTPS не получится, как ни старайся. В нем содержится:

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

    Сертификат понадобится и для подключения любой платежной системы, например «Яндекс.Денег». Логика простая – никто не позволит вам рисковать чужими деньгами.

    Как выбрать SSL-сертификат

    Они делятся на два типа, в зависимости от степени защиты и .

    Domain Validation SSL

    Самый простой вариант. Заработает после того, как вы подвтердите владение доменом. Сделать это можно тремя способами:

    • Через E-mail. Вам на почту придет письмо с инструкцией по верификации. В качестве адреса отправки выбирается либо почта из Whois домена, либо ящики админа или вебмастера.
    • Через запись в DNS. Если у вас настроен сервер электронной почты, создайте специальную запись в DNS. По ней система и подтвердит, что вы действительно владелец сайта. Метод автоматизирован и подходит тем, у кого почта Whois скрыта в настройках.
    • Через хэш-файл. Разместите специальный.txt файл у себя на сервере, чтобы центр сертификации смог установить его наличие.

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

    Business Validation

    Этот вид сертификата SSL надежней, потому что вы подтверждаете факт связи компании с сайтом. Для этого нужно отправить в верификационный центр несколько документов и принять звонок на корпоративный номер. Business Validation-сертификаты делятся на 3 вида:

    • Extended Validation SSL. Это сертификаты с расширенной проверкой. Они нужны всем, кто работает с большим объемом денег: банкам, крупным интернет-магазинам, финансовым компаниям, платежным системам.
    • Wildcard SSL. Такой сертификат защищает и сам сайт, и его поддомены. Причем их может быть любое количество, а располагаться они могут на разных серверах. Обязателен, если вы используете поддомены с разной региональной привязкой или разными проектами.
    • SAN SSl. Главное преимущество этого типа сертификата – поддержка альтернативных доменных имен: и внешних, и внутренних.

    Можно ли установать на свой сайт бесплатный SSL-сертификат?

    Да. Большинство таких продуктов платные, но есть и варианты, за которые не придется отдавать деньги. Это базовые сертификаты с валидацией по домену. Они не позволят прикрутить к ресурсу онлайн-кассу, но защитить соединение пользователя с сервером смогут. Такие SSL подойдут небольшим информационным сайтам или офлайн-бизнесам. Пример – базовый сертификат StartSSL .

    Установка сертификата SSL

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

    В процессе генерации ключа CSR нужно указать:

    • Имя сервера: «site.com» или «*.site.com», если получаете WIldcard сертификат. Звездочка означает любое количество любых символов перед точкой.
    • Код страны: RU, UA, KZ и так далее.
    • Область, например, Saratov Region.
    • Город.
    • Полное название организации или имя владельца сайта.

    Запрос CSR отправляется в центр верификации. На выходе вы получаете сертификат SSL и файл с приватным ключом, который нельзя терять и выкладывать в открытый доступ.

    После этого нужно установить сертификат на веб-сервер. Рассмотрим случаи с Apache и nginx.

    Apache

    Чтобы это сделать, нужно загрузить на сервер все сертификаты: и основные, и промежуточные. Первым делом нужно последний в директорию /usr/local/ssl/crt (используется по умолчанию, в вашем случае может отличаться). В ней будут храниться все сертификаты.

    После этого скачайте основной сертификат, откройте его в любом текстовом редакторе и полностью скопируйте содержимое вместе со строчками «BEGIN» и «END».

    В директории /ssl/crt/ создайте файл vashsite.crt и вставьте в него содержимое сертификата.

    Файл приватного ключа переместите в директорию /usr/local/ssl/private/

    В файле VirtualHost добавьте строки:

    SSLEngine on

    SSLCertificateKeyFile /usr/local/ssl/private/private.key

    SSLCertificateFile /usr/local/ssl/crt/vashsite.crt

    SSLCertificateChainFile /usr/local/ssl/crt/intermediate.crt

    Указывать нужно действительные пути до файлов. Сохраните изменения и перезапустите сервер.

    nginx

    Здесь процесс установки SSL сертификата немного отличается. Сначала нужно объеденить корневой, промежуточный и SSL-сертификаты в один. Для этого создайте файл vashsite.crt и вставьте туда содержимое сертификатов вместе со строчками «BEGIN» и «END» (порядок: SSL, промежуточный, корневой). Пустых строк быть не должно.

    Почти то же самое нужно сделать и с приватным ключом – создать файл vashsite.key и перенести содержимое ключа, загруженного с сайта поставщика.

    Оба файла (vashsite.crt и vashsite.key) поместите в директорию /etc/ssl/ (она используется по умолчанию, но может отличаться).

    В файле с конфигурациями отредактируйте VirtualHost. Добавьте:

    server{
    listen 443;
    ssl on;

    ssl_certificate /etc/ssl/vashsite.crt;
    ssl_certificate_key /etc/ssl/vashsite.key;
    server_name vashsite.com;

    Если директория с сертификатом и ключом отличается от дефолтной, поменяйте ее.

    Теперь сохраните изменения и перезапустите nginx.

    Как получить рабочее HTTPS-соединение

    После установки сертификатов SSL сайт станет доступен по двум адресам: http://vashsite.com и https://vashsite.com. Вам нужно оставить только последний. Для этого настройте файл robots.txt и сделайте 301-редирект со старого сайта.

    В «robots» нужно обновить host. Пример: Host: https://vashsite.com. Для настройки редиректа нужно добавить в файл.htacsess строчки:

    RewriteCond %{SERVER_PORT} !^443$

    RewriteRule ^(.*)$ https://vashsite.com/$1 .

    Теперь осталось сообщить об изменениях поисковикам. В «Вебмастере» «Яндекса» добавьте страницу с https и укажите ее как главное для старого сайта.

    Итоги

    Мы разобрались, что такое https, как установить его на свой сайт и как настроить все правильно. Этот протокол уже стал стандартом соединения и со временем на него перейдут все живые сайты. Этот процесс поощрают поисковики – наличие установленного протокола защищенного соединения HTTPS стало одним из факторов ранжирования. Поэтому, если хотите попасть в топ, установить его придется.

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

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

    Но что же делать, если все планы нарушает внезапно появляющееся предупреждение ваше соединение не защищено.

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

    Cодержание :

    Первым делом рассмотрим возникновение данной проблемы при использовании .

    Значение подобного сообщения

    Зачастую такое сообщение возникает в ходе посещения защищенных сайтов. Такие сайты при взаимодействии с браузером FireFox задействуют особый метод шифрования - #encryption. Это делается для того, чтобы исключить возможность просмотра передаваемой информации злоумышленниками.

    Чтобы понять, что вы заходите именно на такой сайт - обратите внимание на строку отображения адреса посещаемой страницы. В строке статуса (#status_Bar ) защищенного сайта будет отображаться значок в виде закрытого замка. Также он будет отображаться и в адресной строке (#lokation_bar ).

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

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

    В случае, если информация сайта является незащищенной - FireFox будет отображать в строке статуса перечеркнутый косой линией значок замка. Также будет отсутствовать доменное имя в адресной строке и строке статуса. Если вы обращаете на такую информацию внимание - сразу же сможете понять, что посещаемый сайт имеет частичную защиту.

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

    К примеру, если вы используете для защиты системы - откройте «Настройки» и перейдите на вкладку «Активная защита» .

    Там вам понадобится кликнуть по кнопке «Настроить» , расположенной рядом с веб-щитом.

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

    Если вы пользуетесь таким продуктом, как - вам понадобится выполнить следующие действия:

    • открыть окно с настройками антивирусника;
    • в нижней левой части данного окна нажмите на кнопку «Настройки» ;
    • воспользуйтесь пунктом «Дополнительно» , чтобы перейти на вкладку «Сеть» ;
    • снимите выделение со строки меню «Сканировать зашифрованные соединения» ;
    • выделите галочкой параметр «Не сканировать зашифрованные соединения» ;
    • подтвердите проведенные изменения нажатием кнопки «Ок» .

    В интернете не трудно найти необходимую информацию и для других антивирусных продуктов.

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

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

    В заключении следует и самому выйти из семьи, воспользовавшись одноименным параметром.

    Четвертая ошибка

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

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

    Чаще всего этим пользуются непубличные сайты, поэтому вы вполне сможете обойти данное предупреждение.

    Пятая ошибка

    Состоит в том, что предоставляемый вам сертификат принадлежит совсем другому Интернет-ресурсу.

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

    К примеру, вы посетили https:/example.com и получили предупреждение об подобной ошибке, а сертификат был выдан для https:/www example.com. В случае перехода по последнему - предупреждения не возникнут.

    Хранилище сертификатов

    Возникновение подобных сообщений может происходить и из-за повреждения файла cert9.db , хранящего все ваши сертификаты.

    В этом случае не открывая FireFox удалите указанный выше файл с тем, чтобы при следующем запуске произошло его восстановление.

    Для этого выполните следующие действия:

    • откройте меню и выберите пункт «Справка» ;
    • перейдите на вкладку «Информация для решения проблем» ;
    • откройте папку профиля, находящуюся в разделе «Сведения о приложении» ;
    • снова откройте меню и выберите пункт «Выход» ;
    • выделите файл db и удалите его;
    • произведите перезагрузку браузера.

    Как-то при посещении одного из моих блогов начала появляется ошибка антивируса Касперского — «Невозможно гарантировать подлинность домена, с которым устанавливается зашифрованное соединение «. В интернете она уже встречалась мне ранее и я знаю насколько сильно данное окно может раздражать — пользователю нужно сделать 2-3 клика и потратить 5-10секунд времени чтобы попасть на сайт. Если бы я не был на 100% уверен, что мне нужно туда зайти (а переходил бы впервые из поиска), то с большой вероятность просто бы закрыл страницу.

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

    Предупреждение появляется сразу при входе на веб-ресурс в правом нижнем углу. Юзеру предлагается разорвать «недостоверную связь» ради собственной либо перейти к сайту на свой страх и риск.

    Практически все причины появления ошибки подлинности доменного имени связаны с какими-то проблемами у сертификата (цифровой подписью зашифрованного HTTPS-соединения). Сертификат может быть:

    • отозван пользователем;
    • выдан не совсем легально;
    • не предназначен для подтверждения подлинности;
    • иметь нарушения в структуре или цепочке сертификатов;
    • содержать не тот домен, на который установлен.

    Во всех этих случаях вы увидите предупреждение, как на картинке выше. И тут имеется 2 разных пути решения , в зависимости от того срабатывает эта оно на вашем проекте или стороннем веб-ресурсе.

    Ошибка подлинности домена на своем сайте

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

    И тут я вспомнил, как читал на просторах интернета о том, что поисковые системы (или браузеры) при заходе на тот или иной URL автоматически проверяют есть ли в нем HTTPS соединение, и лишь потом запрашивают HTTP.

    Я решил попробовать подставить вместо обычного http://design-mania.ru защищенный протокол https://design-mania.ru, и оказалось, что сайт открывается и по второму адресу тоже. Вполне вероятно, что антивирус действовал по такой же логике, а поскольку в блоге нет никакого сертификата, — это и вызвало ошибку.

    В общем, обратился в тех.поддержку своего хостера FastVPS , где мне прояснили ситуацию технически грамотным языком:

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

    Отключение проверки подлинности домена в Kaspersky

    Если проблема находится на стороннем сервере, то постоянные срабатывания предупреждения антивируса Касперского и трата времени на их обработку также может раздражать. Тут есть 2 варианта решения:

    • полностью отключить проверку в программе;
    • добавить URL определенного проекта в исключения.

    Вспоминается сразу похожая — видимо, «Каспер» пытается перестраховаться в любой непонятной ситуации.

    Чтобы выключить анализ защищенных соединений:

    1. Открываете основное окно программы Kaspersky Internet Security (в интерфейсе других, увы, не ориентируюсь). Дальше кликаете по иконке шестеренки (Настройки), где следует выбрать пункт «Дополнительно» — «Сеть».

    2. Затем находите опцию «Проверка защищенных соединений» и выбираете в ней первый пункт — «не проверять».

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

    Дабы создать исключение для определенного сайта:

    1. Вначале выполняем аналогичные действия предыдущему методу: заходим в настройки, где во вкладке «Дополнительно» выбираем «Сеть».

    2. Для опции проверки соединений чуть ниже имеется линк «Настроить исключения».

    В принципе, на это всем. Больше информации найдете в онлайн справке антивируса. Если после всех манипуляций проблема не исчезла, остается 2 пути: просто забить либо обратиться в тех.поддержку Касперского. Ошибка невозможности гарантирования подлинности домена теоретически может появляться и при использовании другого антивирусного софта. Думаю, в таком случае алгоритм аналогичный — находите настройках где отключить проверку сертификатов на сайтах либо создаете исключения из правил.

    P.S. Еще одно интересное чтиво — детальный чек-лист о том как и когда стоит делать SEO анализ текста . Учитывая то, какую важную роль сейчас играет контент, это полезно знать.

    • Перевод

    Как же все-таки работает 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-соединение возникает еще раньше. Единый сертификат на весь сервер будет использоваться при запросе к любому сайту, расположенному на сервере, что может вызвать