Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.07.2012(UTC) Сообщений: 34
|
Добрый день. Написал программку где проверяются подписи: Код:msgPara.cbSize = sizeof(CRYPT_VERIFY_MESSAGE_PARA);
msgPara.dwMsgAndCertEncodingType = MY_ENCODING_TYPE;
msgPara.hCryptProv = NULL;
msgPara.pfnGetSignerCertificate = NULL;
msgPara.pvGetArg = NULL;
if ( CryptVerifyDetachedMessageSignature(
&msgPara,
0,
pbEncodedBlob,
cbEncodedBlob,
1,
&pbContent,
&cbContent,
&pSignerCert
) )
{
Проблема в том , что если в detached файле поменять строку содержащую регион, то функция всёравно считает что всё норм, а криптоАрм говорит Ошибка. В приложении исправленный , не исправленный файл и подписанный файл. Помогите разобраться в чём косяк?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 945  Откуда: Крипто-Про Поблагодарили: 117 раз в 106 постах
|
CryptVerifyDetachedMessageSignature проверяет только криптографическую подпись, а регион вы поменяли в сертификате, вложенном в подписанное сообщение.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
А КриптоАРМ, наверное, еще и сообщает конкретно в чем он нашел ошибку? (некорректная подпись ЦС под сертификатом автора ЭЦП, при построении цепочки?) а на вкладке со статусом проверки ЭЦП = корректная, так? |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.07.2012(UTC) Сообщений: 34
|
КриптоАрм сказал: Одна или несколько подписей некорректна или нет доверия
Ну как я понял нужно pSignerCert сверять, но какой функцией? CertVerifyCTLUsage? Какая функция проверит регион?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Treno1 написал: Ну как я понял нужно pSignerCert сверять, но какой функцией? CertVerifyCTLUsage? Какая функция проверит регион? CryptVerifyCertificateSignatureEx предназначена для этого |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Treno1 написал:КриптоАрм сказал: Одна или несколько подписей некорректна или нет доверия так там же в GUI есть подробности... нужно посмотреть по вкладкам... |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.07.2012(UTC) Сообщений: 34
|
В криптоАрме в сертификат->владелец->город стоит voscow. Изза него и рушится. Код:if(!(CryptVerifyCertificateSignatureEx(
NULL,
X509_ASN_ENCODING,
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT,
pSignerCert,
CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL,
NULL,
0,
NULL))){
printf("VALID.\n");
}
Вроде работает Отредактировано пользователем 6 августа 2012 г. 18:27:16(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Treno1 написал:В криптоАрме в сертификат->владелец->город стоит voscow. Изза него и рушится. Код:if(!(CryptVerifyCertificateSignatureEx(
NULL,
X509_ASN_ENCODING,
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT,
pSignerCert,
CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL,
NULL,
0,
NULL))){
printf("VALID.\n");
}
Вроде работает как это "оно работает", выдает valid? если проверка не прошла = printf("VALID.\n"); ??? http://msdn.microsoft.com/en-us/library/windows/desktop/aa380916(v=vs.85).aspxЦитата: CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL, NULL,
где сертификат (контекст) издателя? Отредактировано пользователем 6 августа 2012 г. 18:36:12(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.07.2012(UTC) Сообщений: 34
|
Я поторопился с ответом. Не работает.
А зачем нам сертификат издателя? На msdn написано что можно вместо него ставить NULL. Как из PCCERT_CONTEXT сертификата получить PCCERT_CONTEXT издателя?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Treno1 написал:Я поторопился с ответом. Не работает.
А зачем нам сертификат издателя? На msdn написано что можно вместо него ставить NULL. Как из PCCERT_CONTEXT сертификата получить PCCERT_CONTEXT издателя? найти в хранилище сертификатов (ROOT или CA) по идентификатору ключа ЦС (прочитать в пользовательском) (еще как вариант - если сертификат издателя содержится в сертификате пользователя или в самой ЭЦП (вложена цепочка сертификации)) Цитата:А зачем нам сертификат издателя? Чтобы проверить подпись ЦС (корректность сертификата) под пользовательским сертификатом (он же изменен moscow => voskow) для простого примера: загрузи из файла сертификат ЦС в PCCERT_CONTEXT (получи контекст сертификата) и передай на вход функции в __in void *pvIssuer, Отредактировано пользователем 6 августа 2012 г. 18:46:58(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close