Назад | Перейти на главную страницу

Почему для аутентификации клиента клиент может получить доступ к сайту с помощью сертификата openssl, принадлежащего другому клиенту?

Чтобы протестировать двухстороннюю аутентификацию, я создал сертификат CA с помощью openssl. Затем я создал два сертификата для двух сайтов («a.com» и «b.com») в качестве сертификатов на стороне сервера. Также я создал два клиентских сертификата (клиент «a» и клиент «b»). Все эти сертификаты подписаны одним и тем же центром сертификации.

На стороне клиента каждый сертификат клиента используется для доступа к связанному сайту. Другими словами, для доступа к сайту «a.com» требуется сертификат, принадлежащий клиенту «a», или клиент «a» должен быть аутентифицирован. У клиента «b» такая же ситуация с доступом к сайту «b.com».

В эксперименте я только импортировал в браузер сертификат, принадлежащий клиенту «а». При выборе соответствующего сертификата открывается сайт «a.com». Но когда я попытался открыть «b.com», был показан сертификат, принадлежащий клиенту «a», и, выбрав его, я мог получить доступ к «b.com». Следует отметить, что был импортирован только сертификат «а».

(Также следует отметить, что сертификат клиента также содержит сертификат CA).

В чем причина этой проблемы ??

Это не проблема - это сделано намеренно. Устанавливая единый сертификат ЦС на оба веб-сайта «А» и «В», вы даете им указание доверять любым клиентским сертификатам, выпущенным этим ЦС.

Один из способов сделать эту работу так, как вы ожидаете, - это иметь два разных центра сертификации: один для сервера и клиентов «А», а другой - для серверов и клиентов «Б».

В качестве альтернативы веб-сервер Apache может помочь вам, поскольку у него есть SSLRequire или Require директивы, которые могут фильтровать клиентские сертификаты для определенных выражений. Вы могли бы гарантировать, что все пользователи веб-сайта «A» имеют сертификат с OU определенной строки, в то время как пользователи веб-сайта «B» имеют другую строку, и отфильтровать их. Вы можете фильтровать OID политики сертификатов, если вы их реализовали.

Nginx имеет встроенные переменные которые содержат сведения о клиентских сертификатах, и вы можете использовать их для фильтрации.