Статус: Участник
Группы: Участники
Зарегистрирован: 17.06.2016(UTC) Сообщений: 14  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
Добрый день. Стоит задача организации подписания СМЭВ сообщений в Linux через консольные вызовы. Раньше для этих целей успешно использовали OpenSSL. Когда вызовы openssl изменили на вызов утилит КриптоПро, сервис валидации СМЭВ стал отвечать что подпись корректна. Попробовали отвалидировать сообщение через openssl, также валидацию не проходит. Не проходит даже валидация подписи простого текстового примера. Цитата: $ csptest -keys -cont '\\.\HDIMAGE\center-invest-esia' -sign GOST -in /tmp/123 -out /tmp/123.sig -password 123456789 CSP (Type:75) v3.9.8010 KC1 Release Ver:3.9.8495 OS:Linux CPU:AMD64 FastCode:READY:AVX. AcquireContext: OK. HCRYPTPROV: 14683971 GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2001 KC1 CSP Container name: "center-invest-esia" Signature key is available. HCRYPTKEY: 0xe768d3 Exchange key is available. HCRYPTKEY: 0xe80fc3 uec key is not available. Hash object created with alg: GOST 0x801E The data buffer has been hashed. Signature length 64 found. Signature was done. Output file (/tmp/123.sig) has been saved Signature saved into file /tmp/123.sig
Keys in container: signature key exchange key Total: SYS: 0.000 sec USR: 0.160 sec UTC: 0.170 sec [ErrorCode: 0x00000000]
$ certmgr -export -cont '\\.\HDIMAGE\center-invest-esia' -dest /tmp/1.crt Certmgr 1.0 (c) "CryptoPro", 2007-2010. program for managing certificates, CRLs and stores
Exporting: ============================================================================= 1------- Issuer : E=test@cryptopro.ru, CN=center-invest-esia Subject : E=test@cryptopro.ru, CN=center-invest-esia Serial : 0x01 SHA1 Hash : 0x821752396f94ef3846b8e7f4ef0163f583e6cd51 SubjKeyID : 2774d2b2afd48cc9d4547462416c4f98f92bd406 Not valid before : 20/02/2017 09:37:45 UTC Not valid after : 01/02/2030 09:37:45 UTC PrivateKey Link : No ============================================================================= Export complete
[ErrorCode: 0x00000000]
$ openssl x509 -engine gost -in /tmp/1.crt -inform DER -pubkey -noout > /tmp/1.pubkey engine "gost" set.
$ cat /tmp/123 | openssl dgst -engine gost -verify /tmp/1.pubkey -signature /tmp/123.sig engine "gost" set. Verification Failure
Подскажите, как можно получить значение подписи, которое можно будет отвалидировать?
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.06.2016(UTC) Сообщений: 14  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
Обнаружил ещё что публичные ключи получаемые через certmgr -export и csptest -expcert отличаются, поэтому вот пример исключающий эту неточность Цитата: $ csptest -keys -cont '\\.\HDIMAGE\center-invest-esia' -sign GOST -in /tmp/44 -out /tmp/44.s -password 123456789 -keytype signature -expcert /tmp/2.crt CSP (Type:75) v3.9.8010 KC1 Release Ver:3.9.8495 OS:Linux CPU:AMD64 FastCode:READY:AVX. AcquireContext: OK. HCRYPTPROV: 19492675 GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2001 KC1 CSP Container name: "center-invest-esia" Signature key is available. HCRYPTKEY: 0x1311703 Saving AT_SIGNATURE key cert Output file (/tmp/2.crt) has been saved Certificate saved into file /tmp/2.crt Hash object created with alg: GOST 0x801E The data buffer has been hashed. Signature length 64 found. Signature was done. Output file (/tmp/44.s) has been saved Signature saved into file /tmp/44.s
Keys in container: signature key Total: SYS: 0.000 sec USR: 0.090 sec UTC: 0.110 sec [ErrorCode: 0x00000000]
$ openssl x509 -in /tmp/2.crt -inform DER -engine gost -pubkey -noout > /tmp/1.pub engine "gost" set.
$ cat /tmp/44 | openssl dgst -engine gost -verify /tmp/1.pub -signature /tmp/44.s engine "gost" set. Verification Failure
Помогите, люди добрые
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,422  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 734 раз в 632 постах
|
Вы точно хотите проверить 64 байта подписи сертификатом? Или открытым ключом? Или подпись всё таки нужна pkcs#7? |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.06.2016(UTC) Сообщений: 14  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
не совсем понял вопроса. Может я чего то не знаю об ЭЦП, но вроде ЭЦП проверяется публичным ключем, который можно получить в том числе и из сертификата. Что и делаю - выгружаю при подписании сертификат, достаю из него публичный, им и валидирую. Поправьте, если не прав. нет, pkcs#7 не надо. Нужно только значение подписи определенного набора данных, для отправки СМЭВ-запроса.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,422  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 734 раз в 632 постах
|
Всё верно. Попробуйте перевернуть байты подписи (63<->0, 62<->1 ....) |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.06.2016(UTC) Сообщений: 14  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 1 раз в 1 постах
|
Получилось! Спасибо большое! А не подскажете, почему все таки отличаются публичные ключи в сертификатах полученном через -expcert при подписи и полученном через certmgr -export ? Причем тот, что из "certmgr -export" не подходит для валидации.
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close