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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Treno1  
#1 Оставлено : 6 августа 2012 г. 16:32:34(UTC)
Treno1

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

Группы: Участники
Зарегистрирован: 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 файле поменять строку содержащую регион, то функция всёравно считает что всё норм, а криптоАрм говорит Ошибка. В приложении исправленный , не исправленный файл и подписанный файл.

Помогите разобраться в чём косяк?
Offline Новожилова Елена  
#2 Оставлено : 6 августа 2012 г. 17:08:13(UTC)
Новожилова Елена

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

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 945
Женщина
Откуда: Крипто-Про

Поблагодарили: 117 раз в 106 постах
CryptVerifyDetachedMessageSignature проверяет только криптографическую подпись, а регион вы поменяли в сертификате, вложенном в подписанное сообщение.
Offline Андрей Писарев  
#3 Оставлено : 6 августа 2012 г. 17:16:26(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах

А КриптоАРМ, наверное, еще и сообщает конкретно в чем он нашел ошибку? (некорректная подпись ЦС под сертификатом автора ЭЦП, при построении цепочки?)
а на вкладке со статусом проверки ЭЦП = корректная, так?
Техническую поддержку оказываем тут
Наша база знаний
Offline Treno1  
#4 Оставлено : 6 августа 2012 г. 17:32:45(UTC)
Treno1

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

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

КриптоАрм сказал: Одна или несколько подписей некорректна или нет доверия

Ну как я понял нужно pSignerCert сверять, но какой функцией?
CertVerifyCTLUsage? Какая функция проверит регион?
Offline Андрей Писарев  
#5 Оставлено : 6 августа 2012 г. 17:35:46(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
Treno1 написал:

Ну как я понял нужно pSignerCert сверять, но какой функцией?
CertVerifyCTLUsage? Какая функция проверит регион?


CryptVerifyCertificateSignatureEx предназначена для этого
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#6 Оставлено : 6 августа 2012 г. 17:36:36(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
Treno1 написал:
КриптоАрм сказал: Одна или несколько подписей некорректна или нет доверия

так там же в GUI есть подробности... нужно посмотреть по вкладкам...
Техническую поддержку оказываем тут
Наша база знаний
Offline Treno1  
#7 Оставлено : 6 августа 2012 г. 18:26:42(UTC)
Treno1

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Андрей Писарев  
#8 Оставлено : 6 августа 2012 г. 18:34:50(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?

Цитата:
if(!(
если проверка не прошла = printf("VALID.\n"); ??? d'oh!



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)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline Treno1  
#9 Оставлено : 6 августа 2012 г. 18:40:37(UTC)
Treno1

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

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

Я поторопился с ответом. Не работает.

А зачем нам сертификат издателя? На msdn написано что можно вместо него ставить NULL.
Как из PCCERT_CONTEXT сертификата получить PCCERT_CONTEXT издателя?
Offline Андрей Писарев  
#10 Оставлено : 6 августа 2012 г. 18:43:49(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

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