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

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

  • Как именно это делается?
  • Как насчет этого процесса делает его невосприимчивым к атакам "человек-в-середине"?
  • Что мешает случайному человеку создать собственную службу проверки для использования в атаках типа "человек в середине", поэтому все "выглядит" безопасным?

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

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

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

(перейдите к "какая подпись?" внизу)

blob

Ответ 4

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

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

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

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

Ответ 5

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

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