14.04.2006 15:46:53 | Как правильно задать путь+имя к контейнеру на eToken | | Ответов: 17 |
|
Халтобин Евгений | | |
|
Необходимо создать контейнер на eToken PRO. Создается без проблем с таким именем: \\.\AKS ifdh <число>\ContName, где ContName имя контейнера (уникальное имя после создания SCARD\ETOKEN_PRO16_<serial>\CC00\<набор каких-то чисел>). Но нужно различать eToken по серийному номеру! Для этого имя задаю так: \\.\AKS ifdh <число>\SCARD\ETOKEN_PRO16_<serial>\ContName. Функции создания контейнера и генерация пар отрабатывают без ошибок, но контейнер не создается! Помогите, как мне правильно задать имя контейнера. |
|
Ответы:
|
15.04.2006 13:45:10 | Алексей |
|
Хотел поинтересоваться поподробнее, как вам удалось установить такой считыватель и
носитель еТокен в КриптоПро? Под какой ОС? |
|
17.04.2006 9:41:35 | Халтобин Евгений |
|
ОС Windows XP, а насчет установки, добавлял носитель и считыватель в Крипто-Про. |
|
17.04.2006 14:54:18 | Василий |
|
Есть следующие типы имени контейнера (в примерах имена одного и того же контейнера):
1) Дружественное - просто имя без префиксов (например, 95fc070f-a0c4-4366-a181-b27b818036f9)
2) Уникальное - имя с привязкой к конкретному носителю с его характеристиками (название, сер. номер, метка)
(например, SCARD\ETOKEN_PRO_000daa08\CC00\A127)
3) FQCN имя (Full Qualified Container Name) - имя контейнера с указанием считывателя (например, \\.\AKS ifdh 0\95fc070f-a0c4-4366-a181-b27b818036f9)
4) FQCN уникальное имя (например, \\.\AKS ifdh 0\SCARD\ETOKEN_PRO_000daa08\CC00\A127)
Так вот. В уникальном имени используется контрольная сумма (последние цифры). Т.к. заранее эти цифры неизвестны, то создание контейнера по уникальному имени невозможно.
Для контроля серийного номера вставленного токена используйте внешние средства (интерфейс работы с токеном). Или, если на токене уже есть контейнер - информацию из его уникального имени.
|
|
19.04.2006 11:03:23 | Халтобин Евгений |
|
Встала другая проблема. Если на Токене есть контейнер, и я пытаюсь создать еще один, то на ф-ции CryptGenKey(hCryptProv,AT_SIGNATURE,CRYPT_EXPORTABLE,&hKey) постоянно выскакивает окно вставьте ключевой носитель <имя нового контейнера>. Имя нового контейнера задаю так:\\.\AKS ifdh 0\<имя контейнера> |
|
19.04.2006 11:08:46 | Халтобин Евгений |
|
Добавление к предыдущему вопросу. Появляется окно биологического датчика, задаю ПИН к контейнеру. О появляются и исчезают окна вставьте ключевой контейнер |
|
20.04.2006 12:59:35 | Василий |
|
1. Сколько свободной памяти на токене (eToken Properties скажет).
2. При создании нового контейнера используется имя, которого не было ранее на этом компьютере?
3. CryptGenKey делается для контейнера, открытого с флажком CRYPT_NEWKEYSET ? |
|
20.04.2006 15:03:24 | Халтобин Евгений |
|
Да дело в свободной памяти. Спасибо! |
|
20.04.2006 15:03:30 | Халтобин Евгений |
|
Да дело в свободной памяти. Спасибо! |
|
20.04.2006 15:04:00 | Халтобин Евгений |
|
Да дело в свободной памяти. Спасибо! |
|
20.04.2006 15:04:04 | Халтобин Евгений |
|
Да дело в свободной памяти. Спасибо! |
|
20.04.2006 15:04:06 | Халтобин Евгений |
|
Да дело в свободной памяти. Спасибо! |
|
10.05.2006 11:12:35 | Халтобин Евгений |
|
Новая проблема, с именами. Перечисляю считыватели:
CryptGetProvParam(hProv, PP_ENUMREADERS, pbData, &pdwDataLen, flag). Получаю список ("Реестр","AKS ifdh 0","Дисковод, A"). Создаю контейнер:
CryptAcquireContext(&hCryptProv, "\\\\.\\Реестр\\<имя контейнера>", ProvName, ProvType, CRYPT_NEWKEYSET). Выдает ошибку NTE_BAD_KEYSET_PARAM( 0x8009001FL ). С "AKS ifdh 0" все нормально. Почему не проходит с считывателем реестра? |
|
|
попробуйте Registry. "Реестр" - это nickname |
|
10.05.2006 12:30:47 | Халтобин Евгений |
|
Но мне надо использовать "nickname". Я получаю список считывателей, установленных в системе. Как будет называться считыватель реестра(\\.\REGISTRY\) не известно! Создавать контейнер надо с использованием nickname. |
|
11.05.2006 11:15:51 | Халтобин Евгений |
|
В реестре нашел ветки:
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Cryptography\CurrentVersion\KeyDevices\PCSC\AKS ifdh 0\Default\Name = "Считыватель еТокен"
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Cryptography\CurrentVersion\KeyDevices\Registry\Default\Name = "Реестр" …
Список “Name” возвращает функция CryptGetProvParam(hProv, PP_ENUMREADERS, pbData, &pdwDataLen, flag). Если Name подставить в CryptAcquireContext(&hCryptProv, "\\\\.\\Name\\<имя контейнера>", ProvName, ProvType, CRYPT_NEWKEYSET), где Name=”Реестр” то выдает ошибку NTE_BAD_KEYSET_PARAM. А если подставить имя которое находится в HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Cryptography\CurrentVersion\KeyDevices например CryptAcquireContext(&hCryptProv, "\\\\.\\Registry\\<имя контейнера>", ProvName, ProvType, CRYPT_NEWKEYSET),то все работает. Как мне получить список не “Name”, а имена которые прописаны в ветке реестра [HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Cryptography\CurrentVersion\KeyDevices]?
|
|
|
1. Немного попроавлю предыдущие ответы (перепутали терминологию).
У считывателя есть nickname, он зависит только от самого считывателя и всегда одинаков, для реестра это registry, это имя case insansative. Есть еще имя соединения, оно зависит от самого считывателя, например для реестра его просто нет, для дисковода это буква имени диска, например "A". Пара nickname и имя соединения используется для получения FQCN имени, для дисковода это будет \\.\FAT12_A, для реестра \\.\REGISTRY\. Есть еще одно имя - имя считывателя, так как его задал пользователь, это имя может отличаться на разных машинах, по умолчанию для registry "Реестр", но можно и задать "Это хранилище ключей в моем реестре". Пользовательское имя используется только для отображению пользователю, просто для удобства, сравнение этих имен в CSP нет.
2. Функция CryptGetProvParam( ... PP_ENUMREADERS ... ) возвращает, не одно имя, а структуру состоящую из двух имен (строка заканчивающаяся нулем в текущей кодировке пользовательского имени считывателя, за которой следует ASCIIZ строка nickname+имя соединения) и далее байт флагов считывателя. |
|
|
И еще одна поправка, в уникальном имени последние 4 символа действительно контрольная сумма дружественного имени контейнера, она возвращается для тех контейнеров, которые имеют дружественное имя. Но, при открытии контейнера (на чтение или на создание) ее можно не указывать.
Если Вы попытаетесь создать контейнер по уникальному имени он будет создан, а дружественное имя будет совпадать с уникальным.
Если Вы попытаетесь открыть контейнер по уникальному имени без указания контрольной суммы, который содержит и уникальное и дружественное имя, то будет открыт первый попавшийся контейнер, который соответствует уникальному имени. Ситуация когда есть два контейнера с одинаковыми уникальными именами встречается не очень часто, но возможна. |
|