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

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

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

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

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

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

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

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

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

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

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

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

В интересах повышения осведомленности и поощрения таких малоподобных блоггеров, как я, чтобы защитить себя, я написал учебник начального уровня, в котором более подробно объясняются концепции сертификатов и способы безопасного создания и использования самозаверяющего сертификата (в комплекте с образцами кода и скриншотами). Вот ссылка, если она будет полезной для кого-либо еще в будущем: http://www.clintharris.net/2009/self-signed-certificates/ .

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

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

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

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

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

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

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

капля

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

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

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

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

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

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

  • Android Studio - отладочное хранилище
  • проверка сертификата сервера не удалась. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
  • Извлечение открытого / закрытого ключа из файла PKCS12 для последующего использования в SSH-PK-аутентификации
  • Сертификату SSL не доверяют - только на мобильных телефонах
  • Ошибка «Debug certificate expired» в плагинах Android Eclipse
  • Преобразование .pfx в .cer
  • веб-просмотр android с сертификатом клиента
  • Преобразование сертификата CERT / PEM в сертификат PFX
  • Как игнорировать создание пути PKIX не удалось: sun.security.provider.certpath.SunCertPathBuilderException?
  • Программно установить сертификат в Mozilla
  • Как установить доверенный сертификат CA на Android-устройство?
  • Interesting Posts

    Используйте автофильтр по более чем 2 критериям

    Как получить текущего пользователя в ядре asp.net

    Исключить ошибку сегментации записи в shellcode

    Наложение фонового изображения на цвет фона rgba

    Spring MVC: проверка, пост-redirect-получение, частичное обновление, оптимистический параллелизм, безопасность на местах

    при масштабировании элемента с масштабом css3 он становится пиксельным до тех пор, пока анимация не будет завершена. Я анимация элемента с границей

    Выберите строки, соответствующие всем элементам списка.

    Пользователь ASP.NET работает под

    Почему File Explorer часто висит в Windows 8?

    Переместить каталог профиля Windows?

    Показать кол-во матчей в Vim

    Каков самый быстрый способ найти «визуальный» центр многоугольника неправильной формы?

    Как объединить два экземпляра System.Io.Stream в один?

    Существует ли тип C # для представления целочисленного диапазона?

    Почему XmlSerializer не нуждается в типе, который будет помечен ?

    Давайте будем гением компьютера.