Как очистить состояние SSL в браузере по истечении сеанса пользователя?

Я работаю над приложением ASP.NET, в котором наши пользователи проходят аутентификацию с использованием клиентских сертификатов через HTTPS. Наши пользователи используют только IE7.

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

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

Я узнал, как выполнить фактическую очистку кеша из JavaScript:

document.execCommand ("ClearAuthenticationCache");

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

ПРИМЕЧАНИЕ. IE7 позволяет программно очищать кеш только тогда, когда HTTP Keep-Alives отключен на веб-сервере.

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

Любые идеи? Приносим извинения за объем вопроса, но для этого важна предыстория.


person Sam    schedule 17.03.2009    source источник


Ответы (1)


Ничего, я нашел хорошее решение:

  • Когда пользователь успешно входит в систему, мы создаем дополнительный файл cookie сеанса, срок действия которого не истекает до закрытия браузера.

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

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

Это дает нам лучший опыт для пользователя и гарантирует, что сертификат будет кэшироваться только до тех пор, пока сеанс все еще действителен (15 минут, скольжение). Кроме того, файл cookie сеанса не может быть удален пользователем, поэтому нет способа обойти это поведение. Они также не могут использовать сайт, не принимая файлы cookie сеанса.

person Sam    schedule 18.03.2009
comment
Как вы можете явно выйти из системы? Если это JS-вызов ClearAuthenticationCache на стороне клиента, PowerUser может обойти этот вызов (взломать код на стороне клиента). - person Laurent Fournié; 24.08.2011
comment
удар по вопросу Лорана - person Kevin Meredith; 21.05.2013
comment
Мы регистрируем их на сервере, просто обычным методом FormsAuthentication.SignOut () - без взаимодействия с клиентом. - person Sam; 23.05.2013