Очистить состояние SSL-сертификата клиента из JavaScript - PullRequest
8 голосов
/ 15 марта 2012

Я использую клиентские сертификаты в сеансах SSL для аутентификации пользователей, но у меня есть небольшая проблема с кэшированными сеансами. (Я настроил IIS для приема & mdash; не требовать & mdash; клиентских сертификатов.)

Нормальная ситуация:
Пользователь получает доступ к странице, которая запрашивает сертификат. Браузер запускает селектор сертификатов, пользователь выбирает нужный сертификат (и при необходимости вводит PIN-код), и все идет вперед, как и должно.

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

Я решил это в IE, используя document.execCommand("ClearAuthenticationCache");, но он все еще не работает в FF или Chrome, потому что они не поддерживают метод. Есть ли способ решить эту проблему?

Ответы [ 3 ]

6 голосов
/ 15 марта 2012

Вы можете быть заинтересованы в этом обсуждении и этом выпуске Chromium . В частности, вы должны попробовать:

if (window.crypto) window.crypto.logout();
3 голосов
/ 23 апреля 2012

Для Chrome (по крайней мере, в бета-версии 19.0.1084.30) кажется, что если вы можете настроить URL-адрес на том же имени хоста, который требует сертификат клиента, но отклоняет все сертификаты, то выполнение запроса на этот URL будет тот же эффект, что и window.crypto.logout(). Например, если /ssl_logout/ - это специально настроенный URL-адрес:

var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function () {
    // put any actions to carry out upon logout here
};
xmlHttp.open( "GET", "/ssl_logout/", true );
xmlHttp.send();

(Использование страницы, содержащей iframe или img с src="/ssl_logout/" тоже работает.)

1 голос
/ 09 мая 2013

В IE6 +:

document.execCommand('ClearAuthenticationCache');
...