Вопрос

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

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

Решение

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

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

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

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

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

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

Другие советы

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

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

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

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

Ты сказал, что

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

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

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

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

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

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

blob

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top