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

Изменить, чтобы уточнить: Допустим, я работаю на каком-то локальном сервере, megaserver . Я получаю к нему доступ через https://megaserver в браузере. Имеет самозаверяющий сертификат. Чтобы на данный момент получить безопасный доступ к этому серверу, я добавляю его сертификат в свое хранилище CA в своем браузере. Кто-то крадет этот сертификат, создает новый сертификат для https://www.google.com, подписывает его сертификатами megaserver и атакует меня в стиле «человек посередине». Мой браузер принимает сертификат Google, потому что он подписан доверенным сертификатом CA в моей системе. Возможен ли этот гипотетический сценарий?

2 ответа2

2

Да.

Из RFC 5280:

4.2.1.9. Основные ограничения

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

Затем он продолжает:

Если расширение базовых ограничений отсутствует в сертификате версии 3 или расширение присутствует, но логическое значение cA не указано, то сертифицированный открытый ключ НЕ ДОЛЖЕН использоваться для проверки подписей сертификатов.

эффективно проверять подписи сертификатов - значит действовать как CA.

Поэтому, если для вашего самозаверяющего сертификата не установлен CA Basic Constraint, установленный в значение true, его нельзя использовать для подписи подчиненных сертификатов.

Вы уверены, что все эти самозаверяющие сертификаты имеют этот флаг, установленный в true? Если это так, вам действительно нужно поговорить с тем, кто их генерирует, и направить их в сторону некоторых бесплатных онлайновых учебных ресурсов по PKI.


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

Лучший подход - убедиться, что вы управляете тем, кто входит в систему на устройствах, которые создают эти сертификаты. Системы, использующие OpenSSL, GnuTLS, Java и т.д., Могут защитить паролем закрытый ключ. Windows шифрует закрытый ключ, но как только администратор вошел в систему на этом компьютере с Windows, закрытый ключ фактически доступен для взятия.

0

Q: Я добавляю его сертификат в мой CA-магазин в моем браузере. Кто-то крадет этот сертификат, создает новый сертификат для https://www.google.com

Вы добавляете в хранилище сертификатов Открытый ключ самостоятельно созданного локального ЦС. Единственный владелец закрытого ключа CA может подписать чей-либо сертификат (как вы сказали для https://www.google.com), поэтому кража открытого ключа CA из вашего браузера бесполезна, поскольку он не является секретным и не может быть использован для подписания других сертификатов.

В: Мой браузер принимает сертификат Google, потому что он подписан доверенным сертификатом CA в моей системе. Возможен ли этот гипотетический сценарий?

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

Таким образом, ИТ-отдел, который управляет вашим локальным центром сертификации, может выдать и подписать поддельный сертификат для google.com, и ваш браузер будет доверять ему, но ... Вот две технические детали, которые вам нужно знать.

Когда вы подключаетесь к какому-либо домену https напрямую, веб-сервер отвечает публичным сертификатом, который содержит информацию о том, кто подписал этот сертификат, и браузере, ищущем в его хранилище сертификатов CA, который подписал сертификат этого веб-сервера, так что вы можете подумать, что это будет тяжелая работа для парни, которые пытаются подделать google.com, которым следует настроить поддельную копию google.com в качестве собственного веб-сервера и переопределить запись DNS, которая будет указывать на поддельный веб-сайт, притворяющийся google.com

Но на самом деле это можно сделать относительно легко. Хотя это звучит как невозможно (или трудно сделать это), я должен сообщить вам, что делать это нетрудно, и на самом деле это обычная практика для многих компаний по различным причинам наблюдать / перехватывать трафик https по разным причинам (фильтрация, мониторинг и ведение журнала). ) с помощью прозрачного (или с авторизацией) http Proxy.

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

Что я могу посоветовать вам, если вы не хотите быть объектом фильтрации https - настройте какую-нибудь виртуальную машину (например, VirtualBox) с операционной системой, в которой вам удобно, и добавьте туда свой локальный ЦС, сохраняя хост-компьютер не зараженным локальным ЦС.
Другое решение - вы можете использовать разные профили в вашем браузере (Firefox хорош в этом), один для работы, которая будет содержать ваш сертификат локального CA, и другой частный профиль, который не включает локальный CA. Таким образом, вы (на самом деле браузер) можете быстро определить события, если ваш https трафик фильтруется через прокси.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .