Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2013(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 11 раз
|
Коллеги, здравствуйте!
В разделе 4 документа "КриптоПро CSP Версия 3.9. Руководство программиста" сказано, что перед вызовом функции CryptSignHash сертификат должен быть проверен с помощью функции CertVerifyCertificateChainPolicy.
А с какими параметрами должна быть вызвана данная функция, чтобы выполнились необходимые проверки сертификата (списка отзыва сертификатов)? Есть где-нибудь пример работы с данной функцией?
С уважением, Павел
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2013(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 11 раз
|
Коллеги, добрый день!
Еще один вопрос в догонку...
Входным параметром для функции CertVerifyCertificateChainPolicy является PCCERT_CHAIN_CONTEXT (цепочка сертификатов), которая формируется с помощью функции CertGetCertificateChain. Функция CertGetCertificateChain выполняет проверки актуальности сертификата и списка отзыва сертификатов: сроки, цепочку, отозванность. Почему нельзя при проверки актуальности сертификата обойтись только функцией CertGetCertificateChain? Какие необходимые проверки сертификата "закрывает" функция CertVerifyCertificateChainPolicy?
С уважением
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Рекомендуемым способом проверки является вызов CertVerifyCertificateChainPolicy после CertGetCertificateChain. В данном случае вы можете проверить дополнительные вещи, указав нужную политику. Но если ничего дополнительного проверять не требуется, то проверки CertGetCertificateChain достаточно. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2013(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 11 раз
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2013(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 11 раз
|
Коллеги, добрый день! Не работает функция CertVerifyCertificateChainPolicy с флагом CPCERT_CHAIN_POLICY_SIGNATURE. Функция GetLastError, вызванная после функции CertVerifyCertificateChainPolicy, возвращает 2. Если вместо флага CPCERT_CHAIN_POLICY_SIGNATURE поставить флаг CERT_CHAIN_POLICY_BASE, то все ОК. Прошу помочь разобраться. В прикрепленном архиве направляю ключевую информацию (сертификаты, crl, закрытый ключ), которую использовал. Сертификаты получены с помощью тестового УЦ КриптоПро, на сайте КриптоПро. Keys.zip (4kb) загружен 3 раз(а).Ниже приведен исходный код функции проверки сертификата: Код:uint_t verifyCertificateForSign(PCCERT_CONTEXT pCertContext)
{
assert(pCertContext);
uint_t dwFlags = CERT_CHAIN_REVOCATION_CHECK_CHAIN | CERT_CHAIN_CACHE_END_CERT | CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY;
CERT_ENHKEY_USAGE EnhkeyUsage;
EnhkeyUsage.cUsageIdentifier = 0;
EnhkeyUsage.rgpszUsageIdentifier = NULL;
CERT_USAGE_MATCH CertUsage;
CertUsage.dwType = USAGE_MATCH_TYPE_AND;
CertUsage.Usage = EnhkeyUsage;
CERT_CHAIN_PARA ChainPara;
ChainPara.cbSize = sizeof(CERT_CHAIN_PARA);
ChainPara.RequestedUsage = CertUsage;
PCCERT_CHAIN_CONTEXT pChainContext = 0;
if(!CertGetCertificateChain(
NULL, // use the default chain engine
pCertContext, // pointer to the end certificate
NULL, // use the default time
NULL, // search no additional stores
&ChainPara, // use AND logic and enhanced key usage
// as indicated in the ChainPara
// data structure
dwFlags,
NULL, // currently reserved
&pChainContext)) // return a pointer to the chain created
{
uint_t err = GetLastError();
return err;
}
// Параметры для CertVerifyCertificateChainPolicy.
// Заполняем структуру с параметрами проверки
CERT_CHAIN_POLICY_PARA chainPolicyPara = { sizeof(chainPolicyPara) };
CPSIGNATURE_EXTRA_CERT_CHAIN_POLICY_PARA extraChainPolicyPara = { sizeof(extraChainPolicyPara) };
chainPolicyPara.dwFlags = CPPRIVATEKEY_USAGE_PERIOD_CERT_CHAIN_POLICY_SKIP_END_CERT_FLAG; //не проверять срок действия закрытого ключа конечного сертификата
//Готовим структуру для получения статусов
CERT_CHAIN_POLICY_STATUS chainPolicyStatus = { sizeof(chainPolicyStatus) };
CPSIGNATURE_EXTRA_CERT_CHAIN_POLICY_STATUS extraChainPolicyStatus = { sizeof(extraChainPolicyStatus) };
chainPolicyStatus.pvExtraPolicyStatus = &extraChainPolicyStatus;
uint_t resultCode = 0;
// Зовём CertVerifyCertificateChainPolicy
if(!CertVerifyCertificateChainPolicy(
CPCERT_CHAIN_POLICY_SIGNATURE,
pChainContext,
&chainPolicyPara,
&chainPolicyStatus))
{
resultCode = GetLastError();
return resultCode;
}
resultCode = chainPolicyStatus.dwError;
// В случае, если имеется расширенный ответ
if (extraChainPolicyStatus.dwError)
resultCode = extraChainPolicyStatus.dwError;
CertFreeCertificateChain(pChainContext);
return resultCode;
}
С уважением
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Фича Revocation Provider в составе CSP установлена? |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2013(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 11 раз
|
Установил Revocation Provider, заработало как надо.
Большое спасибо!
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close