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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline lotus253  
#1 Оставлено : 28 апреля 2014 г. 12:17:43(UTC)
lotus253

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

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

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

Как получить данные о сертификате и закрытом ключе из приходящего подписанного сообщения с помощью функции CryptMsgGetParam()
для последующей проверки ... ?
У этой функции 39 параметров ... и никакого внятного описания.
Если сталкивались с решением подобной задачи помогите плз.Brick wall

С Уважением
Offline Андрей Писарев  
#2 Оставлено : 28 апреля 2014 г. 13:30:20(UTC)
Андрей *

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2054 раз в 1594 постах
Автор: lotus253 Перейти к цитате
Добрый день.

Как получить данные о сертификате и закрытом ключе из приходящего подписанного сообщения с помощью функции CryptMsgGetParam()
для последующей проверки ... ?
У этой функции 39 параметров ... и никакого внятного описания.
Если сталкивались с решением подобной задачи помогите плз.Brick wall

С Уважением


1. MSDN - есть примеры
2. В подписанном сообщении\сертификате\ нет информации о закрытом ключе.
Техническую поддержку оказываем тут
Наша база знаний
Offline lotus253  
#3 Оставлено : 28 апреля 2014 г. 13:47:01(UTC)
lotus253

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

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

Сказал(а) «Спасибо»: 1 раз
Андрей, Спасибо за ответ)
конкретизирую вопрос:

возможно ли получить данные для последующей прверки c помощью CryptVerifyMessageSignature таким спсобом ? или нужно использовать другой параметр например CMSG_SIGNER_CERT_INFO_PARAM:

if(! CryptMsgGetParam(hMsg, CMSG_CMS_SIGNER_INFO_PARAM, 0, 0, &size)) {
ReportFailure();
CryptMsgClose(hMsg);
return false;
}
if(size == 0) {
CryptMsgClose(hMsg);
return false;
}
CMSG_CMS_SIGNER_INFO *Info = (CMSG_CMS_SIGNER_INFO *) calloc(1, size); //
if(Info == NULL) {
ReportFailure();
CryptMsgClose(hMsg);
return false;
}
if(! CryptMsgGetParam(hMsg, CMSG_CMS_SIGNER_INFO_PARAM, 0, Info, &size)) {
ReportFailure();
CryptMsgClose(hMsg);
return false;
}
if(Info == NULL) {
CryptMsgClose(hMsg);
return false;
}

C Уважением
Offline Андрей Писарев  
#4 Оставлено : 28 апреля 2014 г. 14:29:39(UTC)
Андрей *

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2054 раз в 1594 постах
CryptMsgControl(... CMSG_CTRL_VERIFY_SIGNATURE_EX..)
Техническую поддержку оказываем тут
Наша база знаний
Offline lotus253  
#5 Оставлено : 28 апреля 2014 г. 15:20:49(UTC)
lotus253

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

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

Сказал(а) «Спасибо»: 1 раз
Спасибо)
Получился такой код:

//Get a CERT_INFO structure from hMsg
if(! CryptMsgGetParam(hMsg, CMSG_CMS_SIGNER_INFO_PARAM, 0, 0, &size)) {
ReportFailure();
CryptMsgClose(hMsg);
return false;
}
if(size == 0) {
CryptMsgClose(hMsg);
return false;
}
CMSG_CMS_SIGNER_INFO *Info = (CMSG_CMS_SIGNER_INFO *) calloc(1, size); //CMSG_CMS_SIGNER_INFO //PCERT_INFO
if(Info == NULL) {
ReportFailure();
CryptMsgClose(hMsg);
return false;
}
if(! CryptMsgGetParam(hMsg, CMSG_CMS_SIGNER_INFO_PARAM, 0, Info, &size)) {
ReportFailure();
CryptMsgClose(hMsg);
return false;
}
if(Info == NULL) {
CryptMsgClose(hMsg);
return false;
}

//check a math sign
if(! CryptMsgControl(hMsg, 0, CMSG_CTRL_VERIFY_SIGNATURE_EX, &Info->EncryptedHash)) {
ReportFailure();
free(Info);
CryptMsgClose(hMsg);
return false;
}

CryptMsgControl завершается с ошибкой:
CryptMsgControl CMSG_CMS_SIGNER_INFO - One or more arguments are not valid.

возможно при вызове CryptMsgGetParam нужно использовать CMSG_SIGNER_CERT_INFO_PARAM ? или использовать структуру PCERT_INFO вместо CMSG_CMS_SIGNER_INFO ?

C Уважением
Offline lotus253  
#6 Оставлено : 28 апреля 2014 г. 16:05:36(UTC)
lotus253

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

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

Сказал(а) «Спасибо»: 1 раз
возможно есть другое решение для проверки подписи приходящего сообщения на основании прикрепленного сертификата ?

C Уважением
Offline Андрей Писарев  
#7 Оставлено : 28 апреля 2014 г. 16:25:44(UTC)
Андрей *

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2054 раз в 1594 постах
Автор: Андрей * Перейти к цитате
CryptMsgControl(... CMSG_CTRL_VERIFY_SIGNATURE_EX..)


Заполнить CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA
и
CryptMsgControl(... CMSG_CTRL_VERIFY_SIGNATURE_EX... CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA)
Техническую поддержку оказываем тут
Наша база знаний
Offline lotus253  
#8 Оставлено : 28 апреля 2014 г. 18:14:53(UTC)
lotus253

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

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

Сказал(а) «Спасибо»: 1 раз
Спасибо)
прбую сделать это так:

//Get a CERT_INFO structure from hMsg
if(! CryptMsgGetParam(hMsg, CMSG_SIGNER_CERT_INFO_PARAM, 0, 0, &size)) {
ReportFailure();
CryptMsgClose(hMsg);
return false;
}
if(size == 0) {
CryptMsgClose(hMsg);
return false;
}
PCERT_INFO Info = (PCERT_INFO ) calloc(1, size); //CMSG_CMS_SIGNER_INFO //PCERT_INFO
if(Info == NULL) {
ReportFailure();
CryptMsgClose(hMsg);
log_error("Info == NULL err. ");
return false;
}
if(! CryptMsgGetParam(hMsg, CMSG_SIGNER_CERT_INFO_PARAM, 0, Info, &size)) {
ReportFailure();
CryptMsgClose(hMsg);
return false;
}
if(Info == NULL) {
CryptMsgClose(hMsg);
return false;
}
CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA para;
para.cbSize = sizeof(CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA);
para.dwSignerIndex = 0;
para.dwSignerType = (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING);
para.hCryptProv = 0;
para.pvSigner = Info->Subject.pbData;

//check a math sign
if(! CryptMsgControl(hMsg, 0, CMSG_CTRL_VERIFY_SIGNATURE_EX, &para)) {
ReportFailure();
free(Info);
CryptMsgClose(hMsg);
return false;
}

результат тот-же ... возможно у меня ошибка при инициализации параметров ?

C Уважением
Offline Андрей Писарев  
#9 Оставлено : 28 апреля 2014 г. 18:18:47(UTC)
Андрей *

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2054 раз в 1594 постах
Да,
в para.pvSigner
Техническую поддержку оказываем тут
Наша база знаний
Offline lotus253  
#10 Оставлено : 28 апреля 2014 г. 22:46:54(UTC)
lotus253

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

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

Сказал(а) «Спасибо»: 1 раз
Спасибо)
Попробовал такой вариан и еще штук 30 различных вариантов CryptMsgGetParam (примеры из криптопро и msdn вошли)):

para.cbSize = sizeof(CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA);
para.dwSignerIndex = 0;
para.dwSignerType = (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING);
para.hCryptProv = 0;
//para.pvSigner = Info->Subject.pbData;
para.pvSigner = Info->SubjectPublicKeyInfo.PublicKey.pbData;

самый лучший результат это: The parameter from verify signature is not valid.
тоесть вопрос остается ... какие данные нужно получить из приходящего подписанного сообщения и что именно передать в para.pvSigner ? данная задача решается в Linux(если это имеет значение).

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