Разбираюсь со следующей ситуацией: при первом обращении (после чистки кеша и рестарта сервера) браузер посылает запрос на сервер по SSL, который там начинает обрвбатывться и фишка в том что по-этому кконкретному эндпоинту сервер готов пропусить запрос без сертифката, НО браузер абортит этот запрос, запрашивает сертификаты и посылает новый запрос. На сколько это ложится в workflow? При запросе из приложения, при тех же условиях, все отрабатывает нормально.
Вот нашел модель событий браузера, которая косвенно подтверждает,
но конкретного внятного объяснения не нашел.
Подскажите как оно работает?
Спасибо
Здравствуйте, vladpol, Вы писали:
V>На сколько это ложится в workflow?
Плохо оно ложится в workflow. По вашему объяснению не совсем понятно, что конкретно происходит. Поищите картинки для SSL Handshake, встречаются хорошие с описанием передаваемых данных.
Исходя из вашего описания, вы делаете аутентификакцию клиентов по клиентскому сертификату (это достаточно редко делается)? Потому что в SSL сервер всегда отправляет свой сертификат и фраза "браузер запрашивает сертификаты" имеет смысл только для клиенсткой аутентификации (нельзя не запросить сертификат у сервера). Но при этом в картину все равно не ложится часть, в которой "запрос начинает обрабатываться". Просто потому, что в вашей картинке HTTP State Diagram весь SSL Handshake случается между onBeforeRequest и onBeforeSendHeaders (протокол SSL уровнем ниже HTTP). И ни запроса, ни заголовков на этот момент у сервера нет (не будет же браузер не пойми кому отправлять заголовки и прочие приватные данные). Обрабатывать просто нечего. Кстати, из этого следует еще один интересный факт. Не получится сделать клиентскую аутентификацию для отдельных эндпоинтов, только для всего сервера. Ну т.е. игнорировать клиентский сертификат можно, но запрашиваться он будет при любом обращении к серверу.
В общем, сложно описать наблюдаемую картину исходя из моделей SSL & HTTP. Может, вы наблюдаете запрос OPTIONS перед основным запросом? Это стандартная ситуация. В этом случае вы даже до обработчика на сервере дойдете. Но браузер ответ (response entity) читать не будет, ему только заголовки ответа нужны.
Здравствуйте, maxkar, Вы писали:
M>Здравствуйте, vladpol, Вы писали:
V>>На сколько это ложится в workflow?
M>Плохо оно ложится в workflow. По вашему объяснению не совсем понятно, что конкретно происходит. Поищите картинки для SSL Handshake, встречаются хорошие с описанием передаваемых данных. M>Исходя из вашего описания, вы делаете аутентификакцию клиентов по клиентскому сертификату (это достаточно редко делается)? Потому что в SSL сервер всегда отправляет свой сертификат и фраза "браузер запрашивает сертификаты" имеет смысл только для клиенсткой аутентификации (нельзя не запросить сертификат у сервера).
Да клиентская аутенфикация
Но при этом в картину все равно не ложится часть, в которой "запрос начинает обрабатываться". Просто потому, что в вашей картинке HTTP State Diagram весь SSL Handshake случается между onBeforeRequest и onBeforeSendHeaders (протокол SSL уровнем ниже HTTP). И ни запроса, ни заголовков на этот момент у сервера нет (не будет же браузер не пойми кому отправлять заголовки и прочие приватные данные). Обрабатывать просто нечего. Кстати, из этого следует еще один интересный факт. Не получится сделать клиентскую аутентификацию для отдельных эндпоинтов, только для всего сервера. Ну т.е. игнорировать клиентский сертификат можно, но запрашиваться он будет при любом обращении к серверу.
Да именно так