Как проверяются SSL-сертификаты?

219

Какая последовательность шагов необходима для безопасной проверки SSL-сертификата? Мое (очень ограниченное) понимание состоит в том, что когда вы посещаете сайт https, сервер отправляет сертификат клиенту (браузеру), и браузер получает информацию об источнике сертификата из этого сертификата, затем использует ее для связи с издателем и как-то сравнивает сертификаты на действительность.

  • Как именно это сделано?
  • А как насчет процесса делает его невосприимчивым к атакам «человек посередине»?
  • Что мешает случайному человеку настроить собственную службу проверки для использования в атаках типа «человек посередине», чтобы все «выглядело» защищенным?
rcreswick
источник
wst.space/ssl-part-4-tls-handshake-protocol
Анонимный утконос,
нашел это видео очень полезным для понимания потока youtube.com/watch?v=T4Df5_cojAs
Кришна

Ответы:

308

Вот очень упрощенное объяснение:

  1. Ваш веб-браузер загружает сертификат веб-сервера, который содержит открытый ключ веб-сервера. Этот сертификат подписан закрытым ключом доверенного центра сертификации.

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

  3. Сертификат содержит имя домена и / или IP-адрес веб-сервера. Ваш веб-браузер подтверждает в центре сертификации, что адрес, указанный в сертификате, является тем, к которому он имеет открытое соединение.

  4. Ваш веб-браузер генерирует общий симметричный ключ, который будет использоваться для шифрования HTTP-трафика по этому соединению; это гораздо эффективнее, чем использование шифрования с открытым / закрытым ключом для всего. Ваш браузер шифрует симметричный ключ с помощью открытого ключа веб-сервера, а затем отправляет его обратно, таким образом гарантируя, что только веб-сервер может его расшифровать, поскольку только у веб-сервера есть его закрытый ключ.

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

Эли Кортрайт
источник
4
На шаге 1.5 сервер также «подписывает» что-то с помощью закрытого ключа, связанного с его сертификатом. Это объединяется с проверкой имени / IP, чтобы гарантировать, что только сайт-владелец сертификата представляет его.
Даррон
68
Чтобы увидеть полный рабочий пример этого процесса с использованием Firefox, подключающегося к amazon.com , см. Moserware.com/2009/06/first-few-milliseconds-of-https.html
Джефф Мозер
9
Я не знал, что мой браузер установлен с открытыми ключами всех основных центров сертификации. Теперь я знаю, как мои SSL-сертификаты проверяются без риска MITM :). Спасибо!
OneChillDude
5
Сервер должен запросить сертификат у CAuthority, поэтому он отправляет запрос на него. Как CA может быть уверен, что сервер действителен?
Voipp
4
@voipp: Отличный вопрос! Исторически существовало несколько подходов, таких как «отправить электронное письмо от» webmaster@<domain-being-verified>или «Поместить этот файл в свой домен, чтобы доказать, что вы им владеете». Однако действительно были проблемы с людьми, которые заставляли центры сертификации выдавать сертификаты для доменов, которые они не собственный - классно кто-то сумел получить сомнительный CA, чтобы выдать им сертификат для gmail.com!
Эли Кортрайт
58

Стоит отметить, что помимо покупки сертификата (как уже упоминалось выше), вы также можете создать свой собственный бесплатно; это называется «самоподписанный сертификат». Разница между самоподписанным сертификатом и купленным сертификатом проста: купленный сертификат был подписан центром сертификации, о котором ваш браузер уже знает. Другими словами, ваш браузер может легко проверить подлинность приобретенного сертификата.

К сожалению, это привело к распространенному заблуждению, что самозаверяющие сертификаты по своей природе менее безопасны, чем те, что продаются коммерческими центрами сертификации, такими как GoDaddy и Verisign, и что вам приходится мириться с предупреждениями / исключениями браузера, если вы их используете; это неверно .

Если вы надежно распространяете самозаверяющий сертификат (или сертификат CA, как предложил bobince) и устанавливаете его в браузерах, которые будут использовать ваш сайт , он будет таким же безопасным, как и купленный, и не будет уязвим для человека-посредника. нападения и подделка сертификатов. Очевидно, это означает, что это возможно только в том случае, если только несколько человек нуждаются в безопасном доступе к вашему сайту (например, внутренние приложения, личные блоги и т. Д.).

Клинт Харрис
источник
1
Действительно, безопасное распространение вашего собственного сертификата - это один из способов избавиться от кошки, но гораздо проще обратиться к любому из ряда так называемых «открытых» ЦС. CACert.org мой любимый. Если вы доверяете шагам, которые они предпринимают для защиты выдачи сертификата, то импортировать их корневой сертификат безопасно.
nsayer
6
Мне нравится этот комментарий - к сожалению, он подчеркивает очень важный недостаток CA. Допустим, вы импортируете сертификат CA от Боба Смита - ну, Боб Смит может подписать сертификат для любого домена (включая google.com и chase.com). Именно поэтому GoDaddy / Verisign платят большие деньги за включение в ОС - они проверяются службой безопасности, чтобы убедиться, что у них есть проверки, чтобы убедиться, что они не подписывают сертификат для злоумышленника. Я думаю, что вы должны быть в состоянии сказать "этот CA может подписывать сертификаты только для mysite.com".
Натали Адамс
Разве самоподписанный сертификат не является более безопасным, так как там могут быть заплачены СА за то, что они не должны иметь. Если вы можете безопасно распределять сертификаты CA по конечным точкам, всегда используйте самоподписанные сертификаты.
javaPhobic
Существуют ли какие-либо CA, которые бесплатны и проверены в большинстве основных браузеров? Я ищу базовый сертификат только для подтверждения, что у меня есть электронная почта и доменное имя. Те, которые я нашел, не в большинстве основных браузеров.
Алекс Kwitny
@NathanAdams Теоретически, большие CA должны проверять запросы на выдачу поддельных сертификатов, как вы описываете ... но читайте эту статью: stripe.ian.sh
nsayer
38

Вы сказали, что

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

Клиент не должен проверять с эмитентом, потому что две вещи:

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

Обратите внимание, что 2. не может быть сделано без 1.

Это лучше объяснено на этой большой диаграмме я сделал некоторое время назад

(перейдите к «что подпись?» внизу)

капля

ychaouche
источник
9
Это должен был быть принятый ответ. Ответ @Eli Courtwright - короткий путь к imho, чтобы понять, как работают сертификаты.
Феликс Краззолара
Одного чтения этого может быть недостаточно, но если вы уже знакомы с кусочками SSL, это действительно объединяет все. Хорошая работа!
Кэмерон Ганьон
Фантастическое изображение. Наконец то, что объясняет мои вопросы. Куда бы я ни пошел, чтобы углубиться в детали, я просто сказал, что «браузер проверяет, что сертификат правильный». НО КАК ЭТО ДЕЛАЕТ? Это дает ответ.
ori6151
8

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

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

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

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

nsayer
источник
8

если вы более технически склонны, этот сайт, вероятно, то, что вы хотите: http://www.zytrax.com/tech/survival/ssl.html

предупреждение: кроличья нора углубляется :).

Майк Фризингер
источник