Повторная аутентификация смарт-карты CAC

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

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


person adg    schedule 25.11.2009    source источник
comment
Поделитесь, пожалуйста, как решилась эта проблема. :)   -  person Kevin Meredith    schedule 13.05.2013
comment
@Kevin Я отказался от этого требования, объяснив покупателю, что время ожидания вывода на карте CAC полностью не зависит от браузера. С точки зрения безопасности не стоит пытаться вмешиваться в нормальное функционирование. Их сотрудник службы безопасности согласился с тем, что клиенту не нужно каждый раз повторно вводить пин-код; лучший подход - повторно войти только в том случае, если срок его действия истек.   -  person adg    schedule 30.05.2013


Ответы (3)


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

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

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

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

person erickson    schedule 26.11.2009
comment
Спасибо, sylvarking, кажется, я понимаю, о чем вы говорите. У меня есть большой контроль как над серверами, так и над рабочими станциями (их несколько сотен), поэтому, возможно, я мог бы сделать что-то в браузере, чтобы смарт-карта требовала PIN-кода? - person adg; 28.11.2009
comment
Верно. Если вы управляете рабочими станциями, вы можете настроить все программное обеспечение устройства чтения карт так, чтобы оно чаще запрашивало PIN-код. Например, я использовал ActivClient в качестве программного обеспечения для чтения карт. Это то, что на самом деле вызывает диалоговое окно с запросом PIN-кода, и есть настройка, позволяющая контролировать, как часто пользователю нужно вводить его повторно. - person erickson; 28.11.2009
comment
Мне повезло, что я нашел кого-то с опытом ActivIdentity. Ваш ответ побудил меня взглянуть на службу кэширования PIN-кода, которую я раньше не видел. Я вижу 12 свойств, и одно из них называется «Включить кэширование PIN-кода». Я собираюсь попробовать отключить это. - person adg; 28.11.2009
comment
Служба кэширования PIN-кода является свойством в диспетчере конфигурации ActivClient. - person adg; 28.11.2009
comment
Чтобы не путаться в терминах - это программное обеспечение для карт, а не программное обеспечение для чтения карт. Изменяя настройки кэширования PIN-кода, вы не можете превзойти способ работы SSL в браузере. Если вам нужны настраиваемые потоки аутентификации, возможно, обратите внимание на OpenID и службу openid trustbearer.com. Если я правильно помню, они реализуют аутентификацию на основе плагинов, где есть специальный плагин, который общается с картой. Вероятно, это вызывает диалог PIN-кода (поскольку он использует неявную операцию знака? Не знаю подробностей ..) для каждой транзакции. - person Martin Paljak; 28.11.2009
comment
Еще раз спасибо, Мартин, я подозреваю, что использую неправильный словарь во многих местах, что мешает людям понять мою цель. Я ценю ваше терпение. - person adg; 30.11.2009

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

Для запроса PIN-кода важны две вещи:

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

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

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

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

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

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

person Martin Paljak    schedule 26.11.2009
comment
Спасибо Мартин за отличный комментарий. Я вижу, что должен был предоставить больше информации, но я все еще очень не знаю, что имеет смысл в этой ситуации. На рабочих станциях есть промежуточное ПО под названием ActivIdentity или ActivClient. Процесс называется accoca.exe. Они также управляют Tumbleweed. - person adg; 28.11.2009
comment
Кроме того, из вашего комментария я понял, что моя задача состоит в том, чтобы как-то убедить карту в том, что ей нужно снова запросить PIN-код. Я еще не понял, как работает промежуточное программное обеспечение, но было бы разумно сказать, что когда пользователь получает доступ к URL-адресу, я могу поместить что-то на веб-страницу, что заставит CAC решить, что ему нужно запросить PIN-код? Может быть, я мог бы убить сеанс SSL? (Извините, если это глупая идея, я немного смущен). - person adg; 28.11.2009
comment
Когда я очищаю состояние SSL (используя IE7-Tools-Internet Options-Content-Clear SSL State, он запрашивает сертификат, но не PIN-код. Если я выбираю правильный сертификат, он работает, если я выбираю неправильный сертификат, он терпит неудачу Так зачем мне снова запрашивать сертификат, если он не будет запрашивать PIN-код? Я не понимаю! - person adg; 28.11.2009
comment
Очистка кеша SSL браузера удаляет сеанс. Так что, вероятно, промежуточное программное обеспечение не реализует никаких специальных трюков с PIN-кодом и работает именно так, как я описал: как только карта находится в аутентифицированном состоянии, ключ можно использовать до тех пор, пока приложение не будет перезапущено или карта не будет удалена. Он запрашивает сертификат, чтобы узнать, какой закрытый ключ вы хотите использовать, и если вы выберете свой смарт-карту, он может использовать его для установления нового сеанса, поскольку ключ на карте уже находится в состоянии аутентификации. - person Martin Paljak; 28.11.2009
comment
Ах я вижу. Он запрашивает сертификат, потому что вы можете делать разные вещи с разными ключами одновременно. Я должен был подумать об этом! Возможно, вы видели мой другой вопрос, в котором я узнал, что выход из IE7 всегда будет вызывать запрос PIN-кода при следующем запуске IE7. Это наводит меня на мысль, что IE7 при выходе делает что-то, что сбрасывает состояние карты. Если бы я мог понять, что это такое, я был бы на шаг ближе к тому, что мне нужно (я думаю). - person adg; 30.11.2009
comment
Да, получение криптографического контекста от CryptoAPI и его освобождение (это то, что происходит, когда вы запускаете/закрываете приложение) действительно сбрасывает карту. Это не то, во что нужно верить, так как это простая пара SCardConnect() SCardDisconnect(), которая требуется для доступа к смарт-картам. Вы не можете запросить сброс карты с уровня SSL. Это все равно, что знать, что поворот ключа запускает или останавливает карту, вы можете остановить ее, если превысите 100 км/ч, подключив несколько проводов к спидометру, но это не так, как автомобиль (или ограничитель скорости, поскольку это то, что вам нужно). на самом деле хочу) должен работать. - person Martin Paljak; 30.11.2009
comment
Думаю, теперь я понял. Спасибо, что помогли мне понять. PIN-код не покидает смарт-карту, а время ожидания PIN-кода полностью не зависит от сеанса SSL браузера. Я поместил идею использования хака для принудительного запроса нового PIN-кода в сочетании с очисткой кеша SSL в моей папке с не очень хорошей идеей. Я настаиваю на изменении требования. Еще раз спасибо. - person adg; 02.12.2009

Вы можете использовать функцию javascript, чтобы браузер забыл существующий кеш 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, а код зависит от браузера и работает не во всех браузерах.

person ISuckAtCoding    schedule 11.05.2016