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

Уведомление

Icon
Error

6 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline Dim  
#1 Оставлено : 27 апреля 2010 г. 19:29:19(UTC)
Dim

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

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

Поблагодарили: 14 раз в 8 постах
Есть отдельно: файл с данными, файл подписи, файл сертификата. Возможно файл подписи и файл сертификата соединить вместе, не генеря новую подпись?
Offline Юрий Маслов  
#2 Оставлено : 28 апреля 2010 г. 12:08:44(UTC)
Юрий Маслов

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

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

Поблагодарили: 36 раз в 25 постах
Возможно. Для этого нужно написать программу, которая запишет сертификат в неподписанные атрибуты подписи.
С уважением,
КРИПТО-ПРО
Offline Dim  
#3 Оставлено : 28 апреля 2010 г. 18:02:54(UTC)
Dim

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

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

Поблагодарили: 14 раз в 8 постах
А вы не подскажите какие функции это делают
Offline Kirill Sobolev  
#4 Оставлено : 28 апреля 2010 г. 19:42:32(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
CryptEncodeObject.
Если подпись в формате PKCS#7, то можно попробовать CertAddCertificateContextToStore.
Техническую поддержку оказываем тут
Наша база знаний
Offline Dim  
#5 Оставлено : 28 апреля 2010 г. 20:58:37(UTC)
Dim

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

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

Поблагодарили: 14 раз в 8 постах
Извените за мою тупость, но в CryptEncodeObject параметр lpszStructType каким должен быть?
Offline Kirill Sobolev  
#6 Оставлено : 29 апреля 2010 г. 14:36:27(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
PKCS_CONTENT_INFO
Вся информация по ASN.1 структуре описана в RFC 5652
Вообще, для начала рекомендую решить обратную задачу - разобрать готовый PKCS#7 так, чтобы было похоже на результат работы парсеров типа dumpasn1. А затем заменой функций декодирования на функции кодирования уже получится то, что надо.
Техническую поддержку оказываем тут
Наша база знаний
Offline Dim  
#7 Оставлено : 30 апреля 2010 г. 15:10:43(UTC)
Dim

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

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

Поблагодарили: 14 раз в 8 постах
Спасибо буду разбираться
Offline artsb  
#8 Оставлено : 6 мая 2010 г. 18:58:53(UTC)
artsb

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Здравствуйте!

У меня такая же задача: нужно, что бы и сертификат и ЭЦП некоего файла находились в одном файле. Делаю так:
Код:
bool CertToECP(const char *ccFileName, const Byte *bCert, int iCertLen) {

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

 bool bResult = true;
 HCERTSTORE hFileStore = NULL;
 PCCERT_CONTEXT hCert = NULL;

 hFileStore = CertOpenStore(CERT_STORE_PROV_FILENAME_A,
							PKCS_7_ASN_ENCODING,
							NULL,
							CERT_STORE_OPEN_EXISTING_FLAG,
							ccFileName);

 if(!hFileStore) {
  return false;
 }

 hCert = CertCreateCertificateContext(PKCS_7_ASN_ENCODING | X509_ASN_ENCODING, bCert, iCertLen);

 if(!hCert) {
  CertCloseStore(hFileStore, 0);
  return false;
 }

 if(!CertAddCertificateContextToStore(hFileStore, 
                                      hCert, 
									  CERT_STORE_ADD_REPLACE_EXISTING, 
									  0)) {
  bResult = false;
 }

 CertFreeCertificateContext(hCert);

 if(!CertSaveStore(hFileStore,
			   PKCS_7_ASN_ENCODING,
			   CERT_STORE_SAVE_AS_PKCS7,
			   CERT_STORE_SAVE_TO_FILENAME_A,
			   (AnsiString(ccFileName) + "1").c_str(),
			   0)) {
  bResult = false;
 }


 CertCloseStore(hFileStore, 0);

 return bResult;
}

Имя файла для вывода временное.

Проблема в том, что не отрабатывает функция CertSaveStore. GetLastError говорит, что не верно указан параметр (какой именно, не уточняется).

Что может быть не так? И в ту ли сторону я "копаю"? Может я что-то не так понял...
Offline artsb  
#9 Оставлено : 6 мая 2010 г. 20:23:42(UTC)
artsb

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Кое-что подправил и получил некий результат.
Код:
bool CertToECP(const char *ccFileName, Byte *bECP, int iECPLen, const Byte *bCert, int iCertLen) {

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

 bool bResult = true;
 HCERTSTORE hFileStore = NULL;
 PCCERT_CONTEXT hCert = NULL;
 CRYPT_DATA_BLOB cdb;

 cdb.cbData = iECPLen;
 cdb.pbData = (Byte*)bECP;

 hFileStore = CertOpenStore(CERT_STORE_PROV_PKCS7, 
							PKCS_7_ASN_ENCODING,
							NULL,
							CERT_STORE_OPEN_EXISTING_FLAG,
							&cdb);

 if(!hFileStore) {
  return false;
 }

 hCert = CertCreateCertificateContext(PKCS_7_ASN_ENCODING | X509_ASN_ENCODING, bCert, iCertLen);

 if(!hCert) {
  CertCloseStore(hFileStore, 0);
  return false;
 }

 if(!CertAddCertificateContextToStore(hFileStore, hCert, CERT_STORE_ADD_REPLACE_EXISTING, 0)) {
  bResult = false;
 }

 CertFreeCertificateContext(hCert);

 if(!CertSaveStore(hFileStore,
			   PKCS_7_ASN_ENCODING | X509_ASN_ENCODING,
			   CERT_STORE_SAVE_AS_PKCS7,
			   CERT_STORE_SAVE_TO_FILENAME_A,
			   (void*) ccFileName,
			   0)) {
  bResult = false;
 }

 CertCloseStore(hFileStore, 0);

 return bResult;
}

Созданный файл открывается и в нём лежит сертификат. А вот есть ли там ЭЦП...
Offline artsb  
#10 Оставлено : 7 мая 2010 г. 12:50:11(UTC)
artsb

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

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

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