Очистить состояние SSL-сертификата клиента из JavaScript

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

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

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

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

3 ответа

Решение

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

if (window.crypto) window.crypto.logout();

Для 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/" тоже работает.)

В IE6+:

document.execCommand('ClearAuthenticationCache');
Другие вопросы по тегам