Статус: Новичок
Группы: Участники
Зарегистрирован: 28.04.2014(UTC) Сообщений: 6
Сказал(а) «Спасибо»: 1 раз
|
Добрый день. Как получить данные о сертификате и закрытом ключе из приходящего подписанного сообщения с помощью функции CryptMsgGetParam() для последующей проверки ... ? У этой функции 39 параметров ... и никакого внятного описания. Если сталкивались с решением подобной задачи помогите плз. С Уважением
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Автор: lotus253 Добрый день. Как получить данные о сертификате и закрытом ключе из приходящего подписанного сообщения с помощью функции CryptMsgGetParam() для последующей проверки ... ? У этой функции 39 параметров ... и никакого внятного описания. Если сталкивались с решением подобной задачи помогите плз. С Уважением 1. MSDN - есть примеры 2. В подписанном сообщении\сертификате\ нет информации о закрытом ключе. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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 Уважением
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
CryptMsgControl(... CMSG_CTRL_VERIFY_SIGNATURE_EX..) |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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 Уважением
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 28.04.2014(UTC) Сообщений: 6
Сказал(а) «Спасибо»: 1 раз
|
возможно есть другое решение для проверки подписи приходящего сообщения на основании прикрепленного сертификата ?
C Уважением
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Автор: Андрей * CryptMsgControl(... CMSG_CTRL_VERIFY_SIGNATURE_EX..) Заполнить CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA и CryptMsgControl(... CMSG_CTRL_VERIFY_SIGNATURE_EX... CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA) |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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, ¶)) { ReportFailure(); free(Info); CryptMsgClose(hMsg); return false; }
результат тот-же ... возможно у меня ошибка при инициализации параметров ?
C Уважением
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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(если это имеет значение).
С Уважением
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close