Как проверяются SSL-сертификаты? - PullRequest
169 голосов
/ 09 октября 2008

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

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

Ответы [ 5 ]

251 голосов
/ 09 октября 2008

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

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

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

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

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

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

48 голосов
/ 05 февраля 2009

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

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

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

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

22 голосов
/ 30 мая 2016

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

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

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

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

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

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

(перейдите к «какая подпись?» Внизу)

blob

7 голосов
/ 22 июня 2016

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

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

7 голосов
/ 09 октября 2008

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

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

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

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

...