20.03.2006 21:10:02Сертификаты на Solaris Ответов: 6
Сергей
Используется КриптоПро 3.
Требуется передать на Solaris-машину сертификат и закрытый ключ.По некоторым причинам на Solaris-станции в данный момент недоступны USB и флоппи-дисковод, те передать ключ через дискету или eToken нельзя.

Вопрос в следующем: как сделать это иным способом?
Доступна только сеть.

Сами сертификаты очень легко и удобно устанавливаются в хранилище утилитой storeman.
 
Ответы:
21.03.2006 10:00:01Василий
Сделать контейнер на дискете (на другой машине) и записать папку с дискеты по сети на Solaris в место, где хранятся ключи, когда они делаются на Solaris в HDIMAGE (оно разное для ключей пользователя и компьютера). Для определения последнего сделайте другой контейнер на Solaris в HDIMAGE (csptest-ом или cryptcp) и поищите по имени контейнера.
21.03.2006 13:27:42Сергей
Сделал так. После запроса "key name" от storeman имя было нормально принято, сертификат помещен в хранилище.

Но возникла следующая проблема. Вот такая конструкция возвращает 0,GetLastError() возвращает CRYPT_E_NOT_FOUND:

CertGetCertificateContextProperty( CertCtx, CERT_KEY_PROV_INFO_PROP_ID, NULL,&cbData);

Как я понимаю контейнер сертификат не "привязался" к контейнеру секретного ключа. Как сделать это в Solaris? Если эта конструкция некорректна, подскажите, пожалуйста, чем заменить? В итоге требуется получить имя ключевого контейнера, содержащего секретный ключ сертификата.

С уважением, Сергей
21.03.2006 14:47:13Василий
По-видимому, storeman не смог проставить ссылку на этот контейнер.

Проверьте для начала работоспособность этого контейнера:
csptest -keyset -info -container имя_контейнера
(имя контейнера с префиксом HDIMAGE).

Затем установите сертификат storeman-ом (с указанием полного имени контейнера - с тем же префиксом)
21.03.2006 17:31:54Сергей
Поскольку не помогло, решил описать процесс полностью
Описание:
1. На Win-машине делаю сертификат так:
csptest -makecert CN=NoFate -p 2 -ca

Получаю сертификат. На дискете папка с ключами.
Через панель управления копирую это контейнер с более удобным именем

2. Передаю все на Solaris-машину, где обе папки (оригинал и копию) с ключами в /var/CPROcsp/keys/root/
Копия названа CNTNR, оригинал - ff94481f.000.

3. Проверяю работоспособность контейнера
./csptest -keyset -info -container '\\.\HDIMAGE\CNTNR' - пишет, что все нормально, выдает информацию о ключах

./csptest -keyset -info -container '\\.\HDIMAGE\ полное имя контейнера, взятое с Win-системы.

Так же отрабатывает корректно

4. Начинаю импорт сертификата
./storeman

Далее u, так как нужно в хранилище пользователя

Store:my
File name:/cr.cer
Key name: \\.\HDIMAGE\ здесь полное имя оригинального хранилища
Key type: e (как и создавал)
Результат - CertStore_Add failed, код не пишет, но сообщение - cpcsp:!CompleteUserKey!key-carrier_get_material fail!

На каком этапе ошибаюсь и как исправлять?
23.03.2006 16:54:52Василий
По-видимому, на контейнере есть пароль. К сожалению, стореман не сумеет его спросить, поэтому на время установки сертификата пароль надо снять. После установки пароль можно вернуть.
Ещё вариант - неправильное имя контейнера. Используйте то имя, что выдаёт
csptest -keyset -enum_containers -verifycontext -fqcn
23.03.2006 16:56:20Сергей
Спасибо!