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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline user5412  
#1 Оставлено : 31 августа 2020 г. 15:23:34(UTC)
user5412

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

Группы: Участники
Зарегистрирован: 31.08.2020(UTC)
Сообщений: 2

Добрый день!
Собираюсь реализовать приложение под Windows с использованием CryptoApi, и под Linux (сейчас использую Ubuntu), с использованием CAPILite для подписи/шифрования файлов. В Unix и CryptoApi я новичок.
Установил КриптоПро CSP 4.0 R4 через install.sh
Дополнительно установил пакеты lsb-devel и lsb-capilite.

Попытался собрать пример из SDK CreatingKeyContainer.
При первой попытке получил ошибку Undefined reference to 'GetLastError'
Открыл исходный файл и заменил вызов '=GetLastError()' в HandleError на '=1', а в месте 'if (!(GetLastError() == NTE_NO_KEY))' на 'NTE_NO_KEY', пример собрался.

Пример собрался, но выдаёт ошибку: Could not create a new key container.

Затем попытался написать свой простейший исходник:

#include <string.h>
#include <stdlib.h>
#include </opt/cprocsp/include/cpcsp/CSP_WinDef.h>
#include </opt/cprocsp/include/cpcsp/CSP_WinCrypt.h>
#include </[path to sdk]/samples/rdk/reader/include/reader/tchar.h>
#include <iostream>
#include <[path to sdk]/samples/include/WinCryptEx.h>

using namespace std;

int main()
{
HCRYPTPROV hProv;

if (CryptAcquireContext(&hProv, NULL, NULL, PROV_GOST_2012_256, 0))
cout << "True" << endl;
else
cout << "False" << endl;

if (CryptAcquireContext(&hProv, NULL, NULL, PROV_GOST_2012_512, 0))
cout << "True" << endl;
else
cout << "False" << endl;

if (CryptAcquireContext(&hProv, NULL, NULL, PROV_GOST_2001_DH, 0))
cout << "True" << endl;
else
cout << "False" << endl;
return 0;
}

По итогу собирается без ошибок, но при запуске получаю
False
False
False

Подскажите пожалуйста, чего не хватает в системе, как заставить работать? Brick wall


Offline Максим Коллегин  
#2 Оставлено : 31 августа 2020 г. 15:45:13(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
Код в вашем исходнике не имеет смысла, советую всё таки разобраться с примером.
Знания в базе знаний, поддержка в техподдержке
Offline user5412  
#3 Оставлено : 31 августа 2020 г. 17:00:34(UTC)
user5412

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

Группы: Участники
Зарегистрирован: 31.08.2020(UTC)
Сообщений: 2

Да, я понимаю что код из моего примера не несёт никакой смысловой нагрузки.
Я уже реализовал приложение для windows(всё работает), хочу собрать под Linux, но даже CryptAcquireContext возвращает false.

Если не удаётся инициализировать контекст провайдера, то выполнять дальнейшие действия (работу с ключевым контейнером, вычисление подписи, шифрование, использую функции CryptEncrypt, CryptSignHash и т.д.) видимо тоже не удастся. Например в реализации присутствует алгоритм действий:

DWORD dwProwType = [задаю нужный тип провайдера];
CryptAcquireContext(&hProv,Container,NULL,dwProwType,0)
ALG_ID DigestAlg = [задаю нужный алгоритм];
CryptCreateHash(hProv,DigestAlg,0,0,&hHash);
CryptHashData(hHash,pbBuffer,dwBufferLen,0);
DWORD KeySpec = [задаю существующий тип ключа];
CryptSignHash(hHash,KeySpec,NULL,0,NULL,&dwSigLen);
pbSignature = (BYTE*)malloc(dwSigLen);
CryptSignHash(hHash,KeySpec,NULL,0,pbSignature,&dwSigLen);
Reverse(pbSignature, dwSigLen);

UPD: пример использования CryptAcquireContext без контейнера в реализованном приложении:
CryptAcquireContext(&hProv,NULL,NULL,dwProwType,0)
CryptImportPublicKeyInfo(hProv,MY_ENCODING_TYPE,&certCtxt->pCertInfo->SubjectPublicKeyInfo,&hPubKey)
CryptCreateHash(...)
CryptHashData(...)
CryptVerifySignature(...)

Под windows всё работает правильно. На Ubuntu не работает даже CryptAcquireContext
Поэтому и прошу подсказки, в чём может быть проблема

Отредактировано пользователем 31 августа 2020 г. 17:03:49(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#4 Оставлено : 31 августа 2020 г. 17:56:29(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
Загляните в syslog и попробуйте CSP5R2.
Скорее всего вы что-то недоустановили.
Знания в базе знаний, поддержка в техподдержке
Offline Андрей Емельянов  
#5 Оставлено : 1 сентября 2020 г. 16:37:47(UTC)
Андрей Емельянов

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

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

Сказал «Спасибо»: 4 раз
Поблагодарили: 148 раз в 144 постах
Добрый день.
В дополнение, к вышесказанному, указывайте полностью версию linux.
Цитата:
Установил КриптоПро CSP 4.0 R4 через install.sh
Дополнительно установил пакеты lsb-devel и lsb-capilite.

capilite ставится скриптом install.sh, дополнительно не надо его устанавливать.
Техническую поддержку оказываем тут
Наша база знаний
Наша страничка в Instagram
Online Андрей Русев  
#6 Оставлено : 6 сентября 2020 г. 23:39:33(UTC)
Русев Андрей

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

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,503

Сказал(а) «Спасибо»: 42 раз
Поблагодарили: 609 раз в 421 постах
В пакете lsb-cprocsp-devel есть readme, где написан рецепт сборки и запуска всех тестовых примеров этого SDK.
Официальная техподдержка. Официальная база знаний.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.