2009-03-17 1 views
2

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

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

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

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

document.execCommand ("ClearAuthenticationCache");

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

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

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

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

ответ

2

Ничего, я придумал хорошее решение:

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

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

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

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

+0

Как вы можете «вывести их из системы»? Если это JS-вызов «ClearAuthenticationCache» на стороне клиента, PowerUser может обойти этот вызов (взломать код на стороне клиента). –

+0

bump на вопрос Лорана –

+0

Мы выходим на сервер, просто обычный метод FormsAuthentication.SignOut() - без взаимодействия с клиентом. – Sam

 Смежные вопросы

  • Нет связанных вопросов^_^