Добрый день,
Возникла необходимость в использовании КриптоПро CSP на Linux (Suse SLES 11 SP3).
Успешно выполнил установку, перенес контейнер с закрытым ключом.
Проверка контейнера проходит успешно.
csptest -keyset -check -cont '\\.\HDIMAGE\afd0ddd7-0739-4783-8555-ba64167c320e'
CSP (Type:75) v3.6.5364 KC1 Release Ver:3.6.7491 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 6644755
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2001 KC1 CSP
Container name: "afd0ddd7-0739-4783-8555-ba64167c320e"
Check header passed.
Signature key is not available.
Exchange key is available. HCRYPTKEY: 0x6ca2f3
Check container passed.
Check sign passed.
Check import passed.
Certificate in container matches AT_KEYEXCHANGE key.
Keys in container:
exchange key
Total:
[ErrorCode: 0x00000000]
Импортировал сертификат.
Команда certmgr --list
Certmgr 1.0 (c) "CryptoPro", 2007-2010.
program for managing certificates, CRLs and stores
=============================================================================
1-------
...удалено...
Not valid before : 19/01/2015 05:33:10 UTC
Not valid after : 18/01/2017 05:33:10 UTC
PrivateKey Link : Yes. Container : HDIMAGE\\afd0ddd7.000\D119
=============================================================================
показывает, что сертификат связан с закрытым ключом.
Теперь перехожу к ошибке.
Команды расшифрования и подписи, запускаемые без указания файла сертификата выполняются успешно:
cryptcp -decr -nochain -pin *** 1.csv.p7m 1.csv.p7s
cryptcp -sign -pin *** -nochain 1.csv 1.csv.p7s
С ключом -dn также все работает.
А вот как только я использую ключ -f с указанием файла сертификата, вываливается ошибка:
Error: Can not get certificate private key.
/dailybuilds/CSPbuild/CSP/samples/CPCrypt/Encr.cpp:526: 0x20000136
[ErrorCode: 0x20000136]
Аналогичные действия успешно отрабатывают под Windows.
После серии приседаний, случайно смог воспроизвести такую же ошибка на Windows.
Для этого запускаем панель управления CryptoPro CSP, переходим на закладку Service, выбираем View certificates in container, открываем сертификат и нажимаем Install, а затем жмем No.
После этого при попытке расшифровки с ключом -f будет та же ошибка:
Ошибка: Не удалось получить закрытый ключ сертификата.
.\Encr.cpp:526: 0x20000136
[ErrorCode: 0x20000136]
В случае если нажать Yes все будет ОК.
Визуально, я не смог найти каких либо отличий в конфигурации CSP в случае если было нажато No. Что не так в конфигурации на Linux, тоже не могу сообразить.