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

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

  • Как именно это сделано?
  • А как насчет процесса делает его невосприимчивым к атакам «человек посередине»?
  • Что мешает случайному человеку настроить собственную службу проверки для использования в атаках типа «человек посередине», чтобы все «выглядело» защищенным?
9.10.2008 17:16:29
Anonymous Platypus 20.07.2018 12:23:10
5 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

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

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

295
30.11.2016 20:25:39
На шаге 1.5 сервер также «подписывает» что-то с помощью закрытого ключа, связанного с его сертификатом. Это объединяется с проверкой имени / IP, чтобы гарантировать, что только сайт-владелец сертификата представляет его.
Darron 5.02.2009 02:42:32
Чтобы увидеть полный рабочий пример этого процесса с использованием Firefox, подключающегося к amazon.com , см. Moserware.com/2009/06/first-few-milliseconds-of-https.html
Jeff Moser 29.06.2009 16:05:03
Я не знал, что мой браузер установлен с открытыми ключами всех основных центров сертификации. Теперь я знаю, как мои SSL-сертификаты проверяются без риска MITM :). Спасибо!
OneChillDude 25.07.2014 18:32:07
Сервер должен запросить сертификат у CAuthority, поэтому он отправляет запрос на него. Как CA может быть уверен, что сервер действителен?
voipp 25.02.2018 20:30:23
@voipp: Отличный вопрос! Исторически существовало несколько подходов, таких как «отправить электронное письмо от» webmaster@<domain-being-verified>или «Поместить этот файл в свой домен, чтобы доказать, что вы им владеете». Однако действительно были проблемы с тем, что люди заставляли центры сертификации выдавать сертификаты для доменов, которые они не делают. собственный - классно кто-то сумел получить сомнительный CA, чтобы выдать им сертификат для gmail.com!
Eli Courtwright 5.03.2018 16:12:54

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

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

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

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

8
9.10.2008 17:39:36

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

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

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

56
16.04.2020 10:43:44
Действительно, безопасное распространение вашего собственного сертификата - это один из способов избавиться от кошки, но гораздо проще обратиться к любому из ряда так называемых «открытых» ЦС. CACert.org мой любимый. Если вы доверяете шагам, которые они предпринимают для защиты своего сертификата, то импортировать их корневой сертификат безопасно.
nsayer 8.04.2009 23:36:35
Мне нравится этот комментарий - к сожалению, он подчеркивает очень важный недостаток CA. Допустим, вы импортируете сертификат CA от Боба Смита - ну, Боб Смит может подписать сертификат для любого домена (включая google.com и chase.com). Именно поэтому GoDaddy / Verisign платят большие деньги за включение в ОС - они проверяются службой безопасности, чтобы убедиться, что у них есть проверки, чтобы убедиться, что они не подписывают сертификат для злоумышленника. Я думаю, что вы должны быть в состоянии сказать "этот CA может подписывать сертификаты только для mysite.com".
Natalie Adams 26.11.2013 22:15:32
Разве самоподписанный сертификат не является более безопасным, так как там могут быть заплачены СА за то, что они не должны иметь. Если вы можете безопасно распределять сертификаты CA по конечным точкам, всегда используйте самоподписанные сертификаты.
javaPhobic 17.03.2015 00:46:53
Существуют ли какие-либо CA, которые бесплатны и проверены в большинстве основных браузеров? Я ищу базовый сертификат только для подтверждения, что у меня есть электронная почта и доменное имя. Те, которые я нашел, не в большинстве основных браузеров.
Alex Kwitny 11.09.2015 18:01:15
@NathanAdams Теоретически, большие CA должны проверять запросы на выдачу поддельных сертификатов, как вы описываете ... но читайте эту статью: stripe.ian.sh
nsayer 22.05.2018 15:52:45

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

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

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

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

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

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

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

капля

34
2.05.2018 09:48:20
Это должен был быть принятый ответ. Ответ @Eli Courtwright - короткий путь к imho, чтобы понять, как работают сертификаты.
Felix Crazzolara 1.06.2018 08:41:25
Одного чтения этого может быть недостаточно, но если вы уже знакомы с кусочками SSL, это действительно объединяет все. Хорошая работа!
Cameron Gagnon 10.01.2019 22:15:25
Изображение в ссылке имеет действительно хорошую информацию.
Limestone 28.01.2020 02:53:58
Фантастическое изображение. Наконец то, что объясняет мои вопросы. Куда бы я ни пошел, чтобы углубиться в глубину, я просто сказал, что «браузер проверяет правильность сертификата». НО КАК ЭТО ДЕЛАЕТ? Это дает ответ.
ori6151 13.04.2020 23:31:46

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

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

8
22.06.2016 19:27:16