Аутентификация веб-браузера с сертификатом SSL

Возможно ли аутентификация веб-браузера с помощью сертификата ssl.

Скажем, я храню закрытый ключ в своем приложении, есть ли способ прочитать ключ из браузера и попытаться аутентифицироваться на основе этого?

Вы можете аутентифицировать браузер / пользователя с помощью проверки подлинности клиента и сертификата SSL / TLS.

Клиентский сертификат должен запрашиваться сервером, поэтому вам потребуется доступ к конфигурации сервера (а не только установка некоторого кода PHP на общем сервере). Это делается на уровне SSL / TLS (фактически, механизм не специфичен для HTTPS): сервер запрашивает клиентский сертификат во время установления связи SSL / TLS (иногда через пересмотренное рукопожатие). В Apache Httpd это обычно делается через SSLVerifyClient (хотя вам также нужно указать другие параметры).

Затем сервер проверяет сертификат на CA, с которым вы его настроили (возможно, собственный и, возможно, независимый от ЦС, используемых для самого сертификата сервера). (В качестве альтернативы вы можете отключить проверку сертификатов на уровне сервера в некоторых случаях и сделать это приложение PHP, но это немного более продвинуто, и вам нужно будет знать, что вы делаете.)

Вы можете получить доступ к сертификату клиента из своего приложения и получить его имя (или альтернативные имена) для идентификации клиента.

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


EDIT: Для получения дополнительной информации это поможет, если вы сможете уточнить свой вопрос и что вы намерены делать с этим.

Возможно ли аутентификация веб-браузера с помощью сертификата ssl.

Скажем, я храню закрытый ключ в своем приложении, есть ли способ прочитать ключ из браузера и попытаться аутентифицироваться на основе этого?

Во-первых, строго говоря, нет такой вещи, как «сертификат SSL», поскольку для SSL / TLS можно использовать несколько типов сертификатов, а некоторые из этих же сертификатов также могут использоваться для других целей, кроме SSL / TLS. Как правило, «сертификат SSL» означает «сертификат X.509 в контексте SSL / TLS».

Таким образом, аутентификация веб-браузера с использованием SSL-сертификата подразумевает выполнение этого на уровне SSL / TLS. (Были попытки реализовать безопасность на уровне сообщений с использованием сертификатов X.509 на уровне HTTP, но они широко не поддерживаются браузерами).

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

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

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

Нет, ты не можешь этого сделать.

Происходит некоторое развитие, и несколько дней назад W3C сделал предложение по стандарту шифрования.

Однако вы можете поместить ключ в файл cookie и использовать его для идентификации. Это поведение идентификатора сеанса PHP по умолчанию.