2009-11-25 13 views
9

У нас есть одно приложение на основе браузера, в котором мы хотим, чтобы пользователь повторно аутентифицировался при вводе. Поэтому, когда они обращаются к этому URL-адресу, мы хотим, чтобы у них было предложение PIN-кода, чтобы они повторно проверялись. Есть ли разумный способ сделать это?CAC Smartcard Reauthenticate

Дополнительная информация: Это для карты CAC, и на рабочих станциях есть ActivIdentity и Tumbleweed. Кроме того, я мог бы добавить службу на рабочие станции, если это необходимо. В браузерах все IE7. Веб-сервер - это IIS 6, а страницы написаны в ASP.NET (в основном).

+0

Пожалуйста, поделитесь тем, как этот вопрос был разрешен. :) –

+1

@ Kevin Я отбросил это требование, объяснив клиенту, что тайм-аут на CAC-карте полностью не зависит от браузера. С точки зрения безопасности не рекомендуется пытаться вмешиваться в нормальное функционирование. Их охранник согласился с тем, что нет необходимости, чтобы клиент каждый раз входил в контакт; лучший подход заключается только в том, чтобы вернуться, если он истек. – adg

ответ

10

Здесь есть несколько различных компонентов программного обеспечения.

Первый - это сама карта. Чтобы выполнить цифровую подпись, CAC должен находиться в «проверенном» состоянии, то есть после ввода карты был введен PIN-код. Кроме того, каждый ключ на карте имеет флаг, указывающий, должен ли PIN-код вводиться каждый раз, когда используется ключ. Я не проверял, но я думаю, что это задано для пары ключей электронной почты на CAC. Таким образом, вам нужно будет найти, какие ключи имеют этот флаг «всегда проверять», и настроить средство проверки пути на службе, чтобы принимать только эти ключи. Возможно, вы сможете потребовать определенный OID при использовании расширенного ключа или исключить некоторые из промежуточных сертификатов DoD из построения пути (возможно, пометить их как отозванные).

Промежуточное программное обеспечение на компьютере, разговаривающее с картой, также может кэшировать PIN-код и предоставлять его на карточке всякий раз, когда карта указывает, что для нее требуется PIN-код, прежде чем он завершит операцию. Я думаю, что ActivClient делал это с помощью функции кеширования PIN-кода через версию 6, но в версии 7 этот параметр, похоже, пропал без вести. Я не нашел ничего подобного в встроенной поддержке PIV Windows. Эта «функция» может поставить под угрозу безопасность, поэтому я предполагаю, что она была умышленно удалена и не было каких-либо хакеров реестра или иначе, чтобы восстановить поведение. Это то, что вы бы не контролировали, если только вы не управляете машинами пользователей; не существует HTTP-заголовка или параметра TLS, который вы можете использовать для принудительного ввода PIN-кода. Но с новыми системами это не должно быть проблемой.

На стороне сервера должно быть выполнено полное рукопожатие, чтобы клиент выполнял аутентификацию. Аутентификация клиента не произойдет, если существует действительный сеанс TLS. Таким образом, вам необходимо найти способ сделать недействительным сеанс TLS (а не сеанс приложения, который, вероятно, связан с HTTP-файлом cookie), перед тем, как запрашивать аутентификацию, или направлять запрос проверки подлинности на другой интерфейс, который не имеет сеансов.

+0

Спасибо, sylvarking, я думаю, я понимаю, что вы говорите. У меня есть большой контроль над серверами и рабочими станциями (несколько сотен), так что, возможно, я мог бы что-то сделать в браузере, что заставит смарт-карту требовать PIN-код? – adg

+0

Правильно. Если вы управляете рабочими станциями, вы можете настроить все программное обеспечение для чтения карт, чтобы чаще вводить PIN-код. Например, я использовал ActivClient в качестве программного обеспечения для чтения карт. Это то, что на самом деле появляется в диалоговом окне, чтобы запросить PIN-код, и есть настройка для контроля того, как часто пользователь должен повторно вводить его. – erickson

+1

Мне посчастливилось найти кого-то с опытом ActivIdentity. Ваш ответ заставил меня взглянуть на службу кэширования PIN-кода, которую я раньше не видел. Я вижу 12 свойств, и один из них называется «Включить кэширование PIN-кода». Я попытаюсь отключить это. – adg

6

Существует два способа аутентификации клиентов смарт-карт в Интернете: стандартный TLS/SSL или настраиваемые плагины для браузера. Я предполагаю, что вы говорите о стандартных веб-браузерах (IE/FF/Safari) и аутентификации SSL.

Есть две вещи, которые имеют значение для PIN подсказки:

  • SSL сессии и SSL кэш сеанса Браузере
  • на карте аутентификации состояние соответствующего секретного ключа
  • на пути промежуточного программного обеспечения реализованы.

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

Если сеанс в кеше браузера не может быть повторно использован или когда соединение установлено, промежуточное ПО для смарт-карт (PKCS # 11 на Linux, модуль CryptoAPI/BaseCSP для Windows или Tokend OSX) должно поговорите с клавишами на карте. Если для состояния аутентификации на карточке требуется ввести ПИН-код, обратный вызов обычно запускается браузером. Или, если промежуточное программное обеспечение знает, что ему понадобится PIN-код, он попросит его перед разговором с картой.

Нет связи 1: 1 между вводом PIN-кода и фактической повторной аутентификацией прав доступа к закрытому ключу и повторной аутентификацией сеанса SSL.

Со стандартным SSL вы зависите от способа реализации SSL в браузерах и не можете на 100% надежно «повторно аутентифицироваться, введя PIN-код» на стороне клиента.

Если вы используете Linux, то с помощью OpenSC (который AFAIK может использовать карты CAC) вы можете установить «transaction_reset» в opensc.conf равным true, что приводит к сбросу карты после каждой транзакции (каждое согласование сеанса SSL), и таким образом вы можете быть уверены, что всякий раз, когда вы открываете новый сеанс SSL, пользователь должен снова ввести PIN-код. Это конфигурация клиентской стороны, но не функция, инициированная сервером.

+0

Спасибо, Мартин за отличный комментарий.Я вижу, что я должен был предоставить больше информации, но я все еще очень не осведомлен о том, что имеет смысл в этой ситуации. На рабочих станциях есть промежуточное программное обеспечение, называемое ActivIdentity или ActivClient. Процесс называется accoca.exe. Они также управляют Tumbleweed. – adg

+0

Кроме того, я получаю от вашего комментария, что моя задача - как-то убедить карту, что ему нужно снова запросить PIN-код. Я еще не понял, как работает промежуточное ПО, но было бы разумно сказать, что когда пользователь обращается к URL-адресу, я мог бы поместить что-то на веб-страницу, чтобы заставить CAC решить, что ему нужно запросить PIN-код? Может быть, я могу убить сеанс SSL? (Извините, если это глупая идея, я немного смущен). – adg

+0

Когда я очищаю состояние SSL (используя IE7-Tools-Internet Options-Content-Clear SSL State, он запрашивает у меня сертификат, но не PIN-код. Если я выберу правильный сертификат, он будет работать, если я выберу неправильный сертификат, так почему бы мне снова запросить сертификат, если он не будет запрашивать PIN-код? Я не понимаю! – adg

0

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

function logout() { 
    // clear browser authentication cache 
    // IE specific 
    try 
    { 
     document.execCommand("ClearAuthenticationCache", "false"); 
    } 
    catch(e) 
    { 
     // do nothing 
    } 

    // clear for firefox or any browser that supports window.crypto API 
    if (window.crypto && typeof window.crypto.logout === "function") { 
     window.crypto.logout(); 
    } 
} 

Вы можете использовать метод Javascript SetTimeout для вызова выше функции выхода из системы и, возможно, перенаправить их на logout.aspx страницу, чтобы заставить клиент вводит новый PIN-код.

Но он использует JavaScript и код зависит от браузера и не работает для всех браузеров.