Статус: Новичок
Группы: Участники
Зарегистрирован: 28.03.2013(UTC) Сообщений: 9  Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Всем добрый день!
Пытаюсь решить следующую задачу. Необходимо проверить валидность сертификата. При этом цепочка издателей и их СОС собраны в один файл PKCS#7 с расширением p7b.
Захотел воспользоваться функциями CertCreateCertificateChainEngine и CertGetCertificateChain.
Можно ли как-то используя данные методы выполнить проверку цепочки только с использованием моего локального файла, без запросов в стандартные хранилища типа MY и без запроса СОСов в интернете по указанным точкам распространения?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,457  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 39 раз Поблагодарили: 750 раз в 645 постах
|
Без корневого в ROOT никак. |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 28.03.2013(UTC) Сообщений: 9  Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Автор: maxdm  Без корневого в ROOT никак. В каком случае корневой должен быть в ROOT? Вот сейчас взял сертификат, удалил корневой из ROOT, но корневой есть в файловом хранилище и цепочка проверена, все корректно. Вот код Код:
int CertVerifier::CheckCertChain(const PCCERT_CONTEXT cert, HCERTSTORE hFileStore, FILETIME time) {
HCERTCHAINENGINE hChainEngine;
CERT_CHAIN_ENGINE_CONFIG ChainConfig;
PCCERT_CHAIN_CONTEXT pChainContext;
PCCERT_CHAIN_CONTEXT pDupContext;
CERT_ENHKEY_USAGE EnhkeyUsage;
CERT_USAGE_MATCH CertUsage;
CERT_CHAIN_PARA ChainPara;
DWORD dwFlags=CERT_CHAIN_REVOCATION_CHECK_CHAIN | CERT_CHAIN_TIMESTAMP_TIME;
EnhkeyUsage.cUsageIdentifier = 0;
EnhkeyUsage.rgpszUsageIdentifier=NULL;
CertUsage.dwType = USAGE_MATCH_TYPE_AND;
CertUsage.Usage = EnhkeyUsage;
ChainPara.cbSize = sizeof(CERT_CHAIN_PARA);
ChainPara.RequestedUsage=CertUsage;
memset(&ChainConfig, 0, sizeof(ChainConfig));
ChainConfig.cbSize = sizeof(CERT_CHAIN_ENGINE_CONFIG);
ChainConfig.dwFlags = CERT_CHAIN_CACHE_END_CERT|CERT_CHAIN_USE_LOCAL_MACHINE_STORE;
ChainConfig.hExclusiveRoot = hFileStore;
ChainConfig.hExclusiveTrustedPeople = hFileStore;
if(!CertCreateCertificateChainEngine(&ChainConfig, &hChainEngine)) {
LOG4CPLUS_WARN(m_pLog->getLogger(), m_pLog->getLoggerMsg("The engine creation function failed. Error: %x\n", GetLastError()));
return ERR_CERT_CHAIN;
}
if(!CertGetCertificateChain(
hChainEngine, // use the default chain engine
cert, // pointer to the end certificate
&time, // use time
//hFileStore, // search additional stores
NULL, // search 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
{
LOG4CPLUS_WARN(m_pLog->getLogger(), m_pLog->getLoggerMsg("he chain could not be created. Error: %x\n", GetLastError()));
return ERR_CERT_CHAIN;
}
Соответственно в pChainContext->TrustStatus.dwErrorStatus результат CERT_TRUST_NO_ERROR.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,457  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 39 раз Поблагодарили: 750 раз в 645 постах
|
А в хранилище компьютера корневой сертификат не остался? |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 28.03.2013(UTC) Сообщений: 9  Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Автор: maxdm  А в хранилище компьютера корневой сертификат не остался? Еще раз проверил. Его там нету, я его удалил оттуда. А может он висеть где-то в кэше винды?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:Еще раз проверил. Его там нету, я его удалил оттуда. А может он висеть где-то в кэше винды? Сертификат откройте в окошке и посмотрите на цепочку. Если там есть корневой - значит где-то остался. |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 28.03.2013(UTC) Сообщений: 9  Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Автор: Kirill Sobolev  Цитата:Еще раз проверил. Его там нету, я его удалил оттуда. А может он висеть где-то в кэше винды? Сертификат откройте в окошке и посмотрите на цепочку. Если там есть корневой - значит где-то остался. Там отображается корневой и написано что к нему нет доверия, т.к. он не найден в доверенных корневых сертификатах. Как я понимаю винда его показывает через url указанный в "Доступ к сведениям центра сертификации" проверяемого сертификата.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Автор: gladiator87  Автор: Kirill Sobolev  Цитата:Еще раз проверил. Его там нету, я его удалил оттуда. А может он висеть где-то в кэше винды? Сертификат откройте в окошке и посмотрите на цепочку. Если там есть корневой - значит где-то остался. Там отображается корневой и написано что к нему нет доверия, т.к. он не найден в доверенных корневых сертификатах. Как я понимаю винда его показывает через url указанный в "Доступ к сведениям центра сертификации" проверяемого сертификата. Нет, сертификат пользователя может в себя включать и сертификат УЦ. |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 28.03.2013(UTC) Сообщений: 9  Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Автор: Андрей *  Автор: gladiator87  Автор: Kirill Sobolev  Цитата:Еще раз проверил. Его там нету, я его удалил оттуда. А может он висеть где-то в кэше винды? Сертификат откройте в окошке и посмотрите на цепочку. Если там есть корневой - значит где-то остался. Там отображается корневой и написано что к нему нет доверия, т.к. он не найден в доверенных корневых сертификатах. Как я понимаю винда его показывает через url указанный в "Доступ к сведениям центра сертификации" проверяемого сертификата. Нет, сертификат пользователя может в себя включать и сертификат УЦ. Разобрал с помощью certutil - сертификат УЦ не включен. Так что если я правильно понимаю, он все же проверяет цепочку через мое файловое хранилище сертификатов. Поэтому повторю вопрос, можно ли заставить его проверять только через мое хранилище?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,457  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 39 раз Поблагодарили: 750 раз в 645 постах
|
|
|
 1 пользователь поблагодарил Максим Коллегин за этот пост.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close