02.02.2006 12:09:03 | Не видит ключевой контейнер. | | Ответов: 19 |
|
dim | | |
|
Сразу оговорюсь, чего намутили пользователи не признаются.
Ситуация следующая. Стоит Win2000, CSP 2.0, в CSP установлено два считывателя, дисковод и реестр. Беру дискету с ключами, копирую контейнер в реестр, произвожу установку личного сертификата, при этом указываю контейнер который находится в реестре. После пытаюсь работать, и при обращении к контейнеру CSP требует дискету. Удалил контейнер из реестра, удалил сертификат, заново произвел установку, все равно требует дискету, вставляю дискету, начинает работать. Почему не подцепляется контейнер из реестра? |
|
Ответы:
|
02.02.2006 14:09:37 | Василий |
|
Установку сертификата с привязкой к новому контейнеру следует производить кнопкой "Установить личный сертификат" в разделе Сервис панели КриптоПро CSP. Следует выбрать хранилище "Личные" и обязательно в конце согласиться с предложением заменить сертификат в хранилище. |
|
|
Так все и делаю. Точ в точ. |
|
02.02.2006 17:08:48 | Василий |
|
А какая программа осуществляет доступ к ключам?
Если это - банк-клиент, то, вполне возможно, она вообще не использует сертификат из хранилища Win, а обращается к контейнеру непосредственно по имени. |
|
|
Прога самописанная.
Подскажите в каком месте хранится информация о связи сертификата и контейнера. |
|
03.02.2006 10:24:38 | Василий |
|
Смотря где.
Вероятно, Вам интересно, не в каком виде она хранится, а как её использовать?
Если речь идёт о сертификате, установленном в хранилище сертификатов Win с привязкой к ключевому контейнеру, то, после открытия программой контекста сертификата из хранилища есть возможность получить доступ к соответствующему ключевому контейнеру:
либо функцией CryptAcquireCertificatePrivateKey, либо CertGetCertificateContextProperty с параметром CERT_KEY_PROV_HANDLE_PROP_ID
|
|
|
Когда я пытаюсь подключится к ключевому контейнеру используя CryptAcquireCertificatePrivateKey, выдается сообщение Крипто Про CSP, о том что ключевой носитель в дисководе не верен, вставляю дискету все начинает работать.
Но когда я устанавливал сертификат "Установить личный сертификат" в Крипто Про CSP, я указывал контейнер из реестра. Контейнер перед этим скопировал, с дискеты в реестр. |
|
06.02.2006 12:30:13 | Василий |
|
При установке сертификата нужно учитывать, что для каждого аккаунта пользователя Win хранилища сертификатов свои. Если Ваша программа запускается и работает не под тем аккаунтом, под которым "устанавливали личный сертификат", то будет использована ранее заданная информация. |
|
|
Как удалить эту ранее заданную информацию. Профили пользователей удалены, какие были не знаю, юзера сами их создали, потом сами и удалили. |
|
06.02.2006 15:07:07 | Василий |
|
Панель управления - КриптоПро CSP - Сервис - Удалить запомненные пароли (для каждой уч. Win записи свои настройки) |
|
|
Спасибо за ответ. Будем пробывать в следующий раз. Эти блин юзера преустановили винду. |
|
08.02.2006 18:19:52 | Алексей |
|
Аналогичная проблема. После переноса закрытого ключа в другой контейнер CryptAcquireCertificatePrivateKey ищет приватный ключ там, где оно было первоначально инсталлировано. Кнопки - удалить пароли не помогают. Всё вышеописанное сделано. |
|
08.02.2006 18:19:58 | Алексей |
|
Аналогичная проблема. После переноса закрытого ключа в другой контейнер CryptAcquireCertificatePrivateKey ищет приватный ключ там, где оно было первоначально инсталлировано. Кнопки - удалить пароли не помогают. Всё вышеописанное сделано. |
|
09.02.2006 11:28:53 | Василий |
|
CryptAcquireCertificatePrivateKey использует информацию из сертификата, установленного в хранилище сертификатов Windows. Если хочется использовать другой контейнер - удалите это сертификат из хранилища и установите сертификат с привязкой к новому контейнеру. |
|
09.02.2006 11:38:52 | Алексей |
|
Удалил сертификат из хранилища Windows (IE -> Сервис -> Свойства обозревателя -> Содержание -> Сертификаты -> Remove)
Открыл апплет Crypto Pro CSP из Control Panel нажимаю Install Personal Certificate связываю сертификат с Registry carrier. Указываю хранилище Personal.
После этих манипуляций в хранилище сертификатов Windows сертификат появляется (со ссылкой на приватный ключ, при попытки експорт спрашивает пароль к реестру).
Из программы вызываю CryptAcquirePrivateKey вылезает окошко с выбором carrier-ов (реестра там нет). Ищет тот кариер, на который был помещен приватный ключ первоначально.
|
|
09.02.2006 13:24:03 | Василий |
|
1. Программа запускается под аккаунтом залогиненного пользователя win ?
2. Контекст этого сертификата открывается программой из хранилища сертификатов? Если - да, можно привести параметры ф-и открытия хранилища и ф-и получения контекста сертификата? |
|
09.02.2006 20:11:13 | Алексей |
|
Разобрался. CryptAcquireCertificatePrivateKey не использует информацию хранилища сертификатов виндовс о том, где расположен приватный ключ (привязку сертификата к названию контейнера, которая устанавливается через Install Personal Certificate). Пришлось определять руками название контейнера и соответствующим образом формировать контекст. |
|
10.02.2006 11:30:04 | Василий |
|
> CryptAcquireCertificatePrivateKey не использует информацию хранилища сертификатов виндовс о том, где расположен приватный ключ (привязку сертификата к названию контейнера, которая устанавливается через Install Personal Certificate)
Откуда следует такой вывод? С какими параметрами вы вызываете CryptAcquireCertificatePrivateKey? (Точнее, интересует dwFlags)
В любом случае, не обязательно в программе помнить имя соответствующего сертификату контейнера. Используйте хотя бы непосредственно CertGetCertificateContextProperty с параметром CERT_KEY_PROV_HANDLE_PROP_ID
|
|
10.02.2006 12:27:55 | Алексей |
|
dwFlags был и 0 и CRYPT_ACQUIRE_COMPARE_KEY_FLAG и CRYPT_ACQUIRE_USE_PROV_INFO_FLAG и CRYPT_ACQUIRE_COMPARE_KEY_FLAG + CRYPT_ACQUIRE_USE_PROV_INFO_FLAG
Что касается имени контейнера, то именно так и было сделано (через CertGetProperty). |
|
10.02.2006 15:15:12 | Алексей |
|
Был не прав. Если контекст сертификата вытащен из SystemStore, то AcquirePrivateKey замечательно работает. А вот если он импортирован в созданное хранилище, то не работает.
Спасибо. |
|