Как на самом деле работает SSL?
Всякий раз, когда я вижу, что об этом говорят, это звучит так, будто кто-то просто "включает" SSL, и тогда все запросы / ответы к / с онлайн-сервера магически защищены.
Это правильно? Является ли SSL только кодом - могу ли я написать два приложения и заставить их общаться через SSL, или вам нужно каким-то образом зарегистрировать / сертифицировать их внешне?
10 ответов
Защищенные веб-страницы запрашиваются через порт 443 вместо обычного порта 80. Протокол SSL (довольно сложный сам по себе) отвечает за безопасность связи и использует информацию сертификата на СЕРВЕРЕ и БРАУЗЕРЕ для аутентификации сервера как кто они говорят, что они есть.
Генерировать сертификат SSL легко. Создание одного из них, основанного на информации, встроенной в 99% веб-браузеров, стоит денег. Но технические аспекты не отличаются.
Видите ли, есть организации (Verisign, Globalsign и т. Д.), Которые уже много лет содержат информацию о своих центрах сертификации в браузерах. Таким образом, когда вы посещаете сайт с сертификатом, который они создали (подписали), ваш браузер говорит:
"хорошо, если Verisign доверяет XYZ.com, и я доверяю Verisign, то я доверяю XYZ.com"
Процесс прост:
Перейдите к компетентному поставщику SSL, такому как GlobalSign. Создайте ключ и запрос сертификата на веб-сервере. Используйте их (и свою кредитную карту), чтобы купить сертификат. Установите его на сервер. Направьте веб-браузер на HTTPS (порт 443). Остальное сделано для вас.
SSL - это протокол для зашифрованной связи по TCP-соединению (или другой надежной схеме). Шифрование использует шифрование с открытым ключом с использованием сертификатов X.509. SSL поддерживает как конфиденциальность, так и доверие. Они связаны: если вы не доверяете серверу, вы не верите, что сервер не передал свой закрытый ключ всем в Северной Америке.
Таким образом, клиент должен доверять сертификату сервера. Для общедоступных сайтов это организовано через иерархию центров сертификации, причем корневым органам доверяют автоматически браузеры и такие вещи, как реализация сокетов JRE.
Любой может создать самозаверяющий сертификат для сервера, но затем клиент должен быть настроен вручную, чтобы доверять ему.
SSL сам по себе не волшебная пуля, которая делает все безопасным. У безопасности нет таких вещей.
Однако SSL - это уже разработанная, готовая к использованию система для решения общей проблемы: безопасной потоковой связи по сетевому соединению.
Есть две вещи, которые вам нужно сделать, чтобы защитить ваше приложение с помощью SSL:
- Измените код приложения, чтобы использовать SSL.
- Определите модель доверия сертификата (и разверните и настройте приложение соответственно).
Другие ответы и документация дают лучшие ответы о том, как сделать каждую из этих вещей, чем я мог бы предоставить.
Я буду осторожен с ветром и попытаюсь сжать огромный предмет.
SSL пытается решить две проблемы:
1) Аутентификация и, следовательно, доверие, т. Е. Может ли клиент доверять серверу и наоборот
2) Общение без подслушивания
1) Обрабатывается с помощью посредника, т.е. доверенной третьей стороны - это так называемые "корневые центры сертификации" (или корневые ЦС), например, Verisign, RSA и т. Д.
Если компания хочет аутентифицировать пользователей и, что более важно, если пользователь хочет аутентифицировать веб-сайт компании, к которому она подключается, т.е. к вашему банку, то корневой центр сертификации выдает компании сертификат, который фактически говорит: "Я доверяю корневому центру сертификации, подтверждаю, что доверяю этой компании X". те, о ком они говорят, и выдаю сертификат соответственно ". Таким образом, вы получаете цепочку доверия, т.е. я доверяю сертификату от ACME Co, потому что Root CA Verisign создал и выпустил его.
2) Как только обе стороны аутентифицировались, сертификат (обычно X590) используется для формирования безопасного соединения с использованием шифрования с открытым / закрытым ключом.
Безнадежно простой и неполный, но надежда, которая дает грубую идею
Вам необходимо иметь сертификат сервера, подписанный центром сертификации (CA), за который они будут взимать плату. Клиент должен доверять этому ЦС и иметь копию соответствующего открытого ключа ЦС. Затем клиент может проверить, что вы являетесь тем, кем себя называете (включая доменное имя (из DNS) и отображаемое имя для https).
SSL на самом деле делает две вещи:
- Зашифровывает сообщение так, что наблюдатель, увидевший поток данных, не сможет прочитать разговор.
- Гарантирует, что вы разговариваете с тем, с кем, по вашему мнению, разговариваете.
Только для № 2 вам нужно получить официальные сертификаты. Если вам нужно только зашифровать связь без установки доверительных отношений, вы можете использовать самозаверяющие сертификаты или алгоритм, который не требует сертификатов (например, Диффи-Хелмана).
По большей части вам нужно купить и зарегистрировать сертификат извне.
Включение TLS (в разговорной речи "SSL") не делает ваш сайт волшебно защищенным. Вы все еще можете быть уязвимы к уязвимостям уровня приложения, таким как переполнение стека, внедрение SQL, XSS и CSRF.
Как объяснили другие ответы, TLS защищает только человека посередине. Трафик между клиентом и правильно настроенным сервером TLS не может быть перехвачен или изменен, и клиент может надежно подтвердить подлинность сервера, проверяя сертификат X.509. Это не позволяет злоумышленнику выдавать себя за ваш TLS-сервер.
Это хороший учебник о том, как создавать самозаверяющие сертификаты для Apache.
Если вы хотите узнать, как работает SSL на Сервере или Клиенте, я предлагаю поискать его в Google. Как вы и подозревали, это очень сложная процедура, с большим количеством связи между клиентом и сервером, с очень специфической математикой и тоннами обработки. Существует также много теории, несколько протоколов и много разных алгоритмов и стандартов шифрования. Совершенно невероятно, как смена http: // на https:// настолько проста для пользователя, но приводит к огромному количеству работы для обеих сторон и настолько безопасна. Чтобы действительно понять это, вам нужно пройти курс безопасности (несколько курсов, чтобы полностью понять это), поскольку вся история шифрования уходит на то, чтобы сделать ваш вход в Gmail безопасным.
И да и нет. Вы должны самостоятельно подписать сертификат и протестировать сайт с помощью SSL, прежде чем развертывать его с помощью SSL, прежде всего. Чтобы сделать общедоступный сайт безопасным по протоколу SSL, вам необходимо приобрести сертификат у одного из любого числа поставщиков сертификатов. Затем у вас будет сертификат, подписанный доверенной третьей стороной, привязанный к имени вашего домена, чтобы браузеры пользователей не жаловались на то, что сертификат недействителен и т. Д. Включение SSL в значительной степени просто щелкает переключателем, в противном случае.