Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Проверка подписи СМЭВ при помощи csptest
Статус: Активный участник
Группы: Участники
Зарегистрирован: 20.06.2012(UTC) Сообщений: 30   Откуда: Москва Сказал «Спасибо»: 4 раз Поблагодарили: 4 раз в 2 постах
|
Добрый день! Как проверить подпись из заголовка СМЭВ при помощи утилиты csptest.exe ? Пробую следующий вызов: Код:csptest -sfsign -verify GOST -in SignedInfo_canon.txt -signature SignatureValue.txt -my "E = aaa@aaa.org"
на выходе получаю: Код:CSP (Type:75) v3.6.5359 KC1 Release Ver:3.6.6497 OS:Windows CPU:IA32 FastCode:READY,ENABLED.
#0:
Subject: OID.1.2.643.3.131.1.1=7733506820, E=aaa@aaa.org
Valid : 05.03.2012 - 05.03.2013
Issuer : CN=test-ca
An error occurred in running the program.
.\signtsf.c:651:Signature was NOT verified
Error number 0x8009310b (2148086027).
Встречено неверное значение тега ASN1.
Total: SYS: 0,047 sec USR: 0,000 sec UTC: 0,110 sec
[ErrorCode: 0x8009310b]
в файле SignedInfo_canon.txt Код:<ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:CanonicalizationMethod>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"></ds:SignatureMethod>
<ds:Reference URI="#body">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"></ds:DigestMethod>
<ds:DigestValue>AcwMpu3vrMlU98lc0wJgH3Y+SD6xYyw7CwH+v6UboRo=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
в файле SignatureValue.txt 64 байта с подписью Отредактировано пользователем 5 апреля 2013 г. 16:58:09(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,422  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 734 раз в 632 постах
|
|
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 20.06.2012(UTC) Сообщений: 30   Откуда: Москва Сказал «Спасибо»: 4 раз Поблагодарили: 4 раз в 2 постах
|
Автор: maxdm  никак Но, ведь, существует команда подписания, подходящего СМЭВ: Код:csptest -keyset -sign GOST -in SignedInfo_canon.txt -out SignatureValue.txt -password 1234 -container Ant
почему же нет обратной команды? 
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 20.06.2012(UTC) Сообщений: 30   Откуда: Москва Сказал «Спасибо»: 4 раз Поблагодарили: 4 раз в 2 постах
|
Я выполнил команду подписания: Код:csptest.exe -keyset -sign GOST -in SignedInfo_canon.txt -out SignatureValue.txt -password 111111 -container RRR
в консоле на выходе получил: Код:CSP (Type:75) v3.6.5359 KC1 Release Ver:3.6.6497 OS:Windows CPU:IA32 FastCode:READY,ENABLED.
AcquireContext: OK. HCRYPTPROV: 1344064
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider
Container name: "RRR"
Signature key is not available.
Exchange key is available. HCRYPTKEY: 0x14f080
Hash object created with alg: GOST 0x801E
The data buffer has been hashed.
Signature length 64 found.
Signature was done.
Output file (SignatureValue.txt) has been saved
Signature saved into file SignatureValue.txt
Keys in container:
exchange key
Total: SYS: 0,047 sec USR: 0,031 sec UTC: 0,188 sec
[ErrorCode: 0x00000000]
далее я выполнил команду проверки (поправьте если она не правильная): Код:csptest.exe -keyset -verify GOST -in SignedInfo_canon.txt -signature SignatureValue.txt -password 111111 -container RRR > verify_shot.txt
в консоле на выходе получил: Код:CSP (Type:75) v3.6.5359 KC1 Release Ver:3.6.6497 OS:Windows CPU:IA32 FastCode:READY,ENABLED.
AcquireContext: OK. HCRYPTPROV: 1344088
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider
Hash object created with alg: GOST 0x801E
The data buffer has been hashed.
An error occurred in running the program.
.\ctkey.c:2705:No Imported Key.
Error number 0x0 (0).
Операция успешно завершена.
Total: SYS: 0,016 sec USR: 0,000 sec UTC: 0,078 sec
[ErrorCode: 0x00000001]
Уж очень меня предложение .\ctkey.c:2705:No Imported Key. смущает. Что бы это значило? Отредактировано пользователем 8 апреля 2013 г. 11:37:21(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,422  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 734 раз в 632 постах
|
Для проверки подписи нужно указывать файл открытого ключа (полученный с помощью -export). Повторюсь, csptest не нужно использовать для решения этой задачи. Подпись СМЭВ будет сделать очень проблематично. Для этого проще использовать Java или .NET |
|
 1 пользователь поблагодарил Максим Коллегин за этот пост.
|
Zester оставлено 08.04.2013(UTC)
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 20.06.2012(UTC) Сообщений: 30   Откуда: Москва Сказал «Спасибо»: 4 раз Поблагодарили: 4 раз в 2 постах
|
Получилось! Отвечу себе сам. Нужен публичный ключ или ключ обмена. Выполнять команду подписания нужно так: Код:"c:\Program Files\Crypto Pro\CSP\csptest.exe" -keyset -sign GOST -in SignedInfo_canon.txt -out SignatureValue.txt -password 111111 -container RRR -export public.key -keytype exchange
(в моём случае используется ключ обмена) в консоле на выходе получил: Код:CSP (Type:75) v3.6.5359 KC1 Release Ver:3.6.6497 OS:Windows CPU:IA32 FastCode:READY,ENABLED.
AcquireContext: OK. HCRYPTPROV: 1344144
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider
Container name: "RRR"
Exchange key is available. HCRYPTKEY: 0x14f9f8
Exporting AT_KEYEXCHANGE key
Output file (public.key) has been saved
Public key ALG_ID: 0x2e23 was exported into file public.key
Hash object created with alg: GOST 0x801E
The data buffer has been hashed.
Signature length 64 found.
Signature was done.
Output file (SignatureValue.txt) has been saved
Signature saved into file SignatureValue.txt
Keys in container:
exchange key
Total: SYS: 0,063 sec USR: 0,031 sec UTC: 0,188 sec
[ErrorCode: 0x00000000]
команда подписания такая: Код:"c:\Program Files\Crypto Pro\CSP\csptest.exe" -keyset -verify GOST -in SignedInfo_canon.txt -signature SignatureValue.txt -password 111111 -container RRR -import public.key -keytype exchange
в консоле на выходе получил: Код:CSP (Type:75) v3.6.5359 KC1 Release Ver:3.6.6497 OS:Windows CPU:IA32 FastCode:READY,ENABLED.
AcquireContext: OK. HCRYPTPROV: 1344168
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider
Blob key ALG_ID: 0x2E23 (imported from file public.key)
Imported key ALG_ID: 0x2E23 (11811)
OID : 1.2.643.2.2.19 Name : ГОСТ Р 34.10-2001
Hash object created with alg: GOST 0x801E
The data buffer has been hashed.
Signature was verified OK
Total: SYS: 0,016 sec USR: 0,000 sec UTC: 0,078 sec
[ErrorCode: 0x00000000]
Подпись размера 64 байта в файле SignatureValue.txt сертификат в контейнере в реестре RRR публичный ключ (типа exchange) в файле public.key (при чём при подписании была создана не только подпись, но и публичный ключ) Такая нехитрая комбинация команд позволяет подписать и проверить подписью XMLDSig, которая используется в СМЭВ. Доброго всем здоровья, коллеги
|
 2 пользователей поблагодарили Zester за этот пост.
|
komex оставлено 29.09.2014(UTC), pavelpat оставлено 14.04.2015(UTC)
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 20.06.2012(UTC) Сообщений: 30   Откуда: Москва Сказал «Спасибо»: 4 раз Поблагодарили: 4 раз в 2 постах
|
Цитата:Повторюсь, csptest не нужно использовать для решения этой задачи. Подпись СМЭВ будет сделать очень проблематично. Для этого проще использовать Java или .NET maxdm, что вы имеете в виду? Можете более развёрнуто ответить? Цитата:Для проверки подписи нужно указывать файл открытого ключа (полученный с помощью -export). спасибо, догадался maxdm, в нашей организации проект СМЭВ Поставщика и Потребителя почти завершён на Perl. Можете посоветовать как "прикрутить" CryptoPro для задачи подписания и проверки подписи XMLDsig конверта SOAP? Очень необходимо Есть замысел пойти по простому пути: подписывать и проверять вызовом из Perl команды консоли (system(команда)). Какие подводные камни таит это решение? Отредактировано пользователем 8 апреля 2013 г. 12:21:50(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,422  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 734 раз в 632 постах
|
|
|
 1 пользователь поблагодарил Максим Коллегин за этот пост.
|
Zester оставлено 08.04.2013(UTC)
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 20.06.2012(UTC) Сообщений: 30   Откуда: Москва Сказал «Спасибо»: 4 раз Поблагодарили: 4 раз в 2 постах
|
Порекомендуйте, пожалуйста, как организовать использование сертификатов для проверки подписи во входящих SOAP-конвертах на стороне сервиса(т.е. Поставщика)? Во входящем SOAP-конверте в заголовке содержится сертификат и подпись. Для каждого SOAP-конверта нужно создать контейнер, прописать туда поступивший сертификат, сгенерировать публичный ключ, проверить подпись, удалить контейнер? Или обычно как-то иначе организовывают процесс проверки подписи SOAP-сервисом?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,422  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 734 раз в 632 постах
|
Открытые ключи импортируются в VerifyContext, создавать контейнер не нужно. Т.е импортируем открытый ключ из сертификат, проверяем подпись, проверяем сертификат. |
|
 1 пользователь поблагодарил Максим Коллегин за этот пост.
|
Zester оставлено 08.04.2013(UTC)
|
|
|
Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Проверка подписи СМЭВ при помощи csptest
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close