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

Уведомление

Icon
Error

6 Страницы<12345>»
Опции
К последнему сообщению К первому непрочитанному
Offline artsb  
#21 Оставлено : 7 мая 2010 г. 18:31:04(UTC)
artsb

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

Группы: Участники
Зарегистрирован: 06.05.2010(UTC)
Сообщений: 103
Откуда: центр Вселенной

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Писинин Алексей, спасибо. Проверил. ЭЦП там нет.
Видать я получил не то, что хотел...

Мне нужно склеить два файла в один:
Some_ECP.sign - ЭЦП некоего файла
Some_Cert.cer - сертификат, с помощью которого была создана подпись выше

Как это сделать средствами WinAPI?

Но нужно не просто дописать один файл в конец другого, а обернуть их в контейнер PKCS #7.

Извиняюсь, если некорректно выражаю свои мысли. Просто, как я уже говорил, столкнулся я с этим впервые.

Отредактировано пользователем 7 мая 2010 г. 18:56:32(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#22 Оставлено : 7 мая 2010 г. 21:56:45(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
А подпись то в каком формате?
Знания в базе знаний, поддержка в техподдержке
Offline Kirill Sobolev  
#23 Оставлено : 7 мая 2010 г. 23:27:25(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
попробуйте CryptMsgControl(.., CMSG_CTRL_ADD_CERT, ..)
Техническую поддержку оказываем тут
Наша база знаний
Offline artsb  
#24 Оставлено : 11 мая 2010 г. 0:22:52(UTC)
artsb

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

Группы: Участники
Зарегистрирован: 06.05.2010(UTC)
Сообщений: 103
Откуда: центр Вселенной

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
maxdm написал:
А подпись то в каком формате?

Как мне сказали, PKCS #7. Но немного разобравшись во всём этом, я думаю, что это не так...

Kirill Sobolev написал:
попробуйте CryptMsgControl(.., CMSG_CTRL_ADD_CERT, ..)

Спасибо, попробую.
Offline artsb  
#25 Оставлено : 11 мая 2010 г. 16:44:37(UTC)
artsb

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

Группы: Участники
Зарегистрирован: 06.05.2010(UTC)
Сообщений: 103
Откуда: центр Вселенной

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
CryptMsgControl не подходит. Она сама создает подпись, что не есть хорошо.
Offline Kirill Sobolev  
#26 Оставлено : 11 мая 2010 г. 17:46:48(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Цитата:
Она сама создает подпись

Серьезно? И на каком же ключе?
Техническую поддержку оказываем тут
Наша база знаний
Offline artsb  
#27 Оставлено : 11 мая 2010 г. 18:13:10(UTC)
artsb

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

Группы: Участники
Зарегистрирован: 06.05.2010(UTC)
Сообщений: 103
Откуда: центр Вселенной

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
На закрытом. Она сама ищет в системе.

У меня на компе код с её использованием отработал отлично. А вот когда попробовали выполнить его на другом ПК, посыпались ошибки: "не удаётся найти закрытый ключ".

Отредактировано пользователем 11 мая 2010 г. 18:13:49(UTC)  | Причина: Не указана

Offline Kirill Sobolev  
#28 Оставлено : 11 мая 2010 г. 19:41:39(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Думаю, проблема в какой-то другой операции, которая требует ключ. CryptMsgControl(.., CMSG_CTRL_ADD_CERT, ..) ключ не ищет.
Можно небольшой пример вызова?
Техническую поддержку оказываем тут
Наша база знаний
Offline artsb  
#29 Оставлено : 11 мая 2010 г. 19:57:40(UTC)
artsb

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

Группы: Участники
Зарегистрирован: 06.05.2010(UTC)
Сообщений: 103
Откуда: центр Вселенной

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Kirill Sobolev написал:
Можно небольшой пример вызова?

Вот полностью:
Код:
bool CertToECP(const char *ccFileName, Byte *bECP, int iECPLen, const Byte *bCert, int iCertLen) {

// ccFileName - путь куда будет сохранён результат
// bECP - файл ЭЦП (байтовый массив)
// iECPLen - длина массива
// bCert - файл сертификата (байтовый массив)
// iCertLen - длина массива

 bool bResult = true;
 CRYPT_SIGN_MESSAGE_PARA SigParams;
 PCCERT_CONTEXT hCert = NULL;
 Byte *bRes;
 unsigned long int iSize;

 const unsigned char *rgpbToBeSigned[1]; // массив документов
 unsigned long int rgcbToBeSigned[1]; // массив размерностей документов
 PCCERT_CONTEXT rgpMsgCert[1]; // массив сертификатов
 
 hCert = CertCreateCertificateContext(PKCS_7_ASN_ENCODING | X509_ASN_ENCODING, bCert, iCertLen);

 if(!hCert) {
  return false;
 }

 rgpbToBeSigned[0] = bECP;
 rgcbToBeSigned[0] = iECPLen;
 rgpMsgCert[0] = hCert;

 SigParams.cbSize = sizeof(CRYPT_SIGN_MESSAGE_PARA);
 SigParams.dwMsgEncodingType = PKCS_7_ASN_ENCODING | X509_ASN_ENCODING;
 SigParams.pSigningCert = hCert;
 SigParams.HashAlgorithm.pszObjId = szOID_PKCS_7;
 SigParams.HashAlgorithm.Parameters.cbData = NULL;
 SigParams.cMsgCert = 1;
 SigParams.rgpMsgCert = rgpMsgCert;
 SigParams.cAuthAttr = 0;
 SigParams.dwInnerContentType = 0;
 SigParams.cMsgCrl = 0;
 SigParams.cUnauthAttr = 0;
 SigParams.dwFlags = 0;
 SigParams.pvHashAuxInfo = NULL;
 SigParams.rgAuthAttr = NULL;

 if(!CryptSignMessage(&SigParams, true, 1, rgpbToBeSigned, rgcbToBeSigned, NULL, &iSize)) {
  return false;
 }

 bRes = new Byte[iSize];
 if(!bRes) {
  CertFreeCertificateContext(hCert);
  return false;
 }

 if(!CryptSignMessage(&SigParams, true, 1, rgpbToBeSigned, rgcbToBeSigned, bRes, &iSize)) {
  delete [] bRes;
  CertFreeCertificateContext(hCert);
  return false;
 }

 int hFile;
 hFile = FileCreate((AnsiString(ccFileName) + ".p7b").c_str());

 if(hFile) {
  FileWrite(hFile, bRes, iSize);

  FileClose(hFile);
 }
 else {
  bResult = false;
 }

 delete [] bRes;

 CertFreeCertificateContext(hCert);

 return bResult;
}

Отредактировано пользователем 11 мая 2010 г. 19:59:17(UTC)  | Причина: Не указана

Offline artsb  
#30 Оставлено : 11 мая 2010 г. 20:01:49(UTC)
artsb

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

Группы: Участники
Зарегистрирован: 06.05.2010(UTC)
Сообщений: 103
Откуда: центр Вселенной

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Сегодня уточнил. Подпись у меня в формате PKCS#7. Нужно к ней приклеить или добавить в параметры, или ещё как-нибудь прикрутить сертификат. Причём, пересоздавать подпись нельзя.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
6 Страницы<12345>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.