Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Andykk  
#1 Оставлено : 7 сентября 2015 г. 12:58:28(UTC)
Andykk

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.08.2015(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Добрый день!

Имеется сертифицированный КриптоПро 3.9 под Linux и нужно получить в итоге подписанный XML в стандарте xmldsig. В связи с этим возникли вопросы:

1) Можно ли с помощью утилит командной строки подписать XML по стандарту xmldsig? Есть ли готовая команда?

2) Можно ли с помощью утилит командной строки подсчитать хеш и сделать подпись, аналогичные нижеследующим?

<ds:DigestValue>DchZXwp0f5oEIScpdSh2XoVCKb3akN7FuJZHdRDTB6c=</ds:DigestValue>
<ds:SignatureValue>K53QXU1Q5N6/K4rrQOzWNab2j2uspaWGjR/FTXZG7QZIvqX4QaogPG2IYJTiWcN32tSZvW3sFa6aAEvsk1aCLw==</ds:SignatureValue>

3) Есть ли функции capilite, которыми можно было выполнить хеш и подпись из пункта 2?

Буду признателен за ответ или ссылки на соответствующую документацию.

Offline Максим Коллегин  
#2 Оставлено : 7 сентября 2015 г. 20:53:00(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,408
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 722 раз в 626 постах
Из готовых решений на linux - только browser plugin.
Можно самостоятельно собрать xmlsec/libxml2 и написать утилиту для подписи.
Так же можно воспользоваться КриптоПро DSS Lite.
Знания в базе знаний, поддержка в центре поддержки
Offline Andykk  
#3 Оставлено : 8 сентября 2015 г. 10:47:30(UTC)
Andykk

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.08.2015(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Автор: maxdm Перейти к цитате
Из готовых решений на linux - только browser plugin.
Можно самостоятельно собрать xmlsec/libxml2 и написать утилиту для подписи.
Так же можно воспользоваться КриптоПро DSS Lite.


Спасибо, но браузеры тут не помогут, поскольку решение серверное, работает без участия человека.

Прошу уточнить ваш ответ.

Вот я нашел в capilite функции CryptCreateHash, CryptSignHash и CryptVerifyHash, которые, как я надеюсь, могут сделать необходимые мне части xmldsig.

Скажите, а поставляемые утилиты (cryptcp, csptest и т.д.) имеют такую функциональность? Может быть есть недокументированные ключики, которыми можно получить гостовские хеш и подпись без PKCS#7 и CMS?
Offline Евгений Пономаренко  
#4 Оставлено : 8 сентября 2015 г. 11:14:08(UTC)
Евгений Пономаренко

Статус: Активный участник

Группы: Участники
Зарегистрирован: 03.05.2012(UTC)
Сообщений: 171
Откуда: Екатеринбург

Сказал(а) «Спасибо»: 46 раз
Поблагодарили: 23 раз в 19 постах
Решал схожую задачу на CentOS, использовал expat как парсер
Хэш считается примерно так:
BYTE rgbHash[GR3411LEN];
DWORD cbHash = 0;
HCRYPTPROV hProv = 0;
HCRYPTHASH hHash = 0;
CryptAcquireContext(&hProv,NULL,NULL,PROV_GOST_2001_DH,CRYPT_VERIFYCONTEXT);
CryptCreateHash(hProv, CALG_GR3411, 0, 0, &hHash);
...
// из коллбэка expat
CryptHashData(*((HCRYPTHASH *)data), (const unsigned char *)buf, strlen(buf), 0);
...
cbHash=GR3411LEN;
CryptGetHashParam(hHash, HP_HASHVAL, rgbHash, &cbHash, 0);
CryptDestroyHash(hHash);
итд.
Подпись через CryptSignMessage, типа-
CRYPT_SIGN_MESSAGE_PARA sign_params;
DWORD sp_size=sizeof(CRYPT_SIGN_MESSAGE_PARA);
memset(&sign_params,0,sp_size);
sign_params.cbSize=sp_size;
sign_params.dwMsgEncodingType=PKCS_7_ASN_ENCODING;
sign_params.pSigningCert=m_CertContext;
sign_params.HashAlgorithm.pszObjId=(CHAR *)szOID_CP_GOST_R3411;
//// get signature size
if(!CryptSignMessage(&sign_params,TRUE,1,&in,&insize,NULL,&buffer_size))
...
buffer_out=new BYTE[buffer_size];
//// sign data
if(!CryptSignMessage(&sign_params,TRUE,1,&in,&insize,buffer_out,&buffer_size))
...
Сразу скажу-основная проблема-правильно написать нормализацию xml. Можно попробовать взять где-то готовое.
thanks 1 пользователь поблагодарил Евгений Пономаренко за этот пост.
Andykk оставлено 08.09.2015(UTC)
Offline Andykk  
#5 Оставлено : 8 сентября 2015 г. 11:30:08(UTC)
Andykk

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.08.2015(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
О, спасибо! То, что надо.

Для всего остального собираюсь использовать xmlsec1.
Offline Andykk  
#6 Оставлено : 8 сентября 2015 г. 11:49:25(UTC)
Andykk

Статус: Новичок

Группы: Участники
Зарегистрирован: 28.08.2015(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
В принципе, имея libgost_capi.so, можно собрать xmlsec1 + libxml2 + openssl и все должно нормально работать. Этим я сейчас и занимаюсь. Другое дело, что скорее всего это будет не сертифицированное ФСБ решение. Даже когда сертифицируют версию 4.0.


Update:
Похоже, что xmlsec1 не может объяснить openssl, что ключи надо грузить не из файла, а из контейнера :( Нет у него такого механизма. Ладно, будем писать свою обертку.

Отредактировано пользователем 8 сентября 2015 г. 16:14:12(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.