Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Наши способы организации безопасного удалённого доступа к рабочим местам и корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline simakvladimir  
#1 Оставлено : 24 марта 2021 г. 12:04:05(UTC)
simakvladimir

Статус: Новичок

Группы: Участники
Зарегистрирован: 08.11.2016(UTC)
Сообщений: 5
Российская Федерация
Откуда: Ижевск

Сказал(а) «Спасибо»: 3 раз
У нас имеется spa приложение, в котором выполняется подписание документов в браузере через плагин "КриптоПро ЭЦП Browser plug-in"

Для того, чтобы многократно не вводить пароль используется свойство CachePin объекта PrivateKey согласно примеру ( https://docs.cryptopro.r...les-private-key-cachepin )

Однако, в целях безопасности, чтобы пароль не оставался закешированным неопределенно долгое количество времени (у нас spa, поэтому сессия работы пользователя по времени может быть достаточно долгой, когда страница браузера не перезагружается), поэтому через некоторое время таймаута выполняется очистка созданных крипто-про объектов - с помощью вызова функции cadesplugin.ReleasePluginObjects() (согласно https://docs.cryptopro.r...es/plugin/plugin-methods ), что позволяет сбросить кеш пароля и в следующий раз при подписании затребовать пароль повторно.

Но в случае, когда серт-ты находятся на физическом носителе (например, рутокене), когда пароль закеширован путем установки в true св-ва CachePin объекта PrivateKey, то в этом случае, даже если физически токен извлечен, то подписания выполняются без запроса пароля, используя закешированный.

Вопрос:
Существует ли возможность средствами "КриптоПро ЭЦП Browser plug-in" отслеживать физическое присутствие токена? Как-то проверять хотя бы в режиме пуллинга его статус (подключен/извлечен)?

На форуме было найдено решение в рамках "толстого" клиента - https://www.cryptopro.ru....aspx?g=posts&t=7410 . Но нет ли возможности сделать то же самое только в браузере?
Конечно можно использовать браузерный плагин для рутокена и через предоставляемое им апи проверять его доступность, но хотелось бы более универсальное решение, не зависящее от конкретного вендора токена и реализуемое на базе плагина криптопро, если это возможно, конечно.

Заранее спасибо за ответы и помощь)

Отредактировано пользователем 24 марта 2021 г. 12:21:49(UTC)  | Причина: Не указана

Offline Ситдиков Денис  
#2 Оставлено : 24 марта 2021 г. 13:46:19(UTC)
Ситдиков Денис

Статус: Активный участник

Группы: Участники
Зарегистрирован: 01.03.2017(UTC)
Сообщений: 70
Российская Федерация
Откуда: Москва

Поблагодарили: 13 раз в 12 постах
Добрый день!
У объекта CCspInformation есть свойство Readers, которое позволяет перечислить доступные считыватели.

Если использовать совместно с About.MediaFilter(cadesplugin.MEDIA_TYPE_SCARD), то можно получить список доступных токенов.
thanks 1 пользователь поблагодарил Ситдиков Денис за этот пост.
simakvladimir оставлено 24.03.2021(UTC)
Offline simakvladimir  
#3 Оставлено : 24 марта 2021 г. 18:49:49(UTC)
simakvladimir

Статус: Новичок

Группы: Участники
Зарегистрирован: 08.11.2016(UTC)
Сообщений: 5
Российская Федерация
Откуда: Ижевск

Сказал(а) «Спасибо»: 3 раз
Ситдиков Денис Offline , большое спасибо)

Пока остановились на следующем варианте - ежесекундная проверка количества ридеров, если их кол-во изменилось, что считаем, что токен был вставлен/извлечен:

Асинхронная версия:
Код:

var about = yield cadesplugin.CreateObjectAsync("CAdESCOM.About");
//yield about.MediaFilter(cadesplugin.MEDIA_TYPE_SCARD); // Тут падает с ошибкой {message: "Указан неправильный тип. (0x8009000A)", requestid: 5, type: "error"}
var providerName = yield about.CSPName();
var cCspInformation = yield cadesplugin.CreateObjectAsync("X509Enrollment.CCspInformation");
yield cCspInformation.InitializeFromName(providerName);
var readers = yield cCspInformation.Readers;
var count = yield readers.Count;


Синхронная версия:
Код:

var about = cadesplugin.CreateObject("CAdESCOM.About");
//about.MediaFilter(0x8); // Тут падает с ошибкой
var cCspInformation = cadesplugin.CreateObject("X509Enrollment.CCspInformation");
var providerName = about.CSPName();
cCspInformation.InitializeFromName(providerName);
var count = cCspInformation.Readers.Count;


Несмотря на то, что падает при установке фильтра about.MediaFilter(cadesplugin.MEDIA_TYPE_SCARD), повторюсь, что решения, приведенного выше в принципе оказалось достаточно.
Благодарю)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.