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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline gladiator87  
#1 Оставлено : 23 октября 2013 г. 18:16:07(UTC)
gladiator87

Статус: Новичок

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

Сказал(а) «Спасибо»: 1 раз
Всем добрый день!

Пытаюсь решить следующую задачу. Необходимо проверить валидность сертификата. При этом цепочка издателей и их СОС собраны в один файл PKCS#7 с расширением p7b.

Захотел воспользоваться функциями CertCreateCertificateChainEngine и CertGetCertificateChain.

Можно ли как-то используя данные методы выполнить проверку цепочки только с использованием моего локального файла, без запросов в стандартные хранилища типа MY и без запроса СОСов в интернете по указанным точкам распространения?
Offline Максим Коллегин  
#2 Оставлено : 23 октября 2013 г. 19:08:55(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,457
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 39 раз
Поблагодарили: 750 раз в 645 постах
Без корневого в ROOT никак.
Знания в базе знаний, поддержка в центре поддержки
Offline gladiator87  
#3 Оставлено : 24 октября 2013 г. 11:25:36(UTC)
gladiator87

Статус: Новичок

Группы: Участники
Зарегистрирован: 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.
Offline Максим Коллегин  
#4 Оставлено : 24 октября 2013 г. 15:08:26(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,457
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 39 раз
Поблагодарили: 750 раз в 645 постах
А в хранилище компьютера корневой сертификат не остался?
Знания в базе знаний, поддержка в центре поддержки
Offline gladiator87  
#5 Оставлено : 24 октября 2013 г. 15:37:52(UTC)
gladiator87

Статус: Новичок

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

Сказал(а) «Спасибо»: 1 раз
Автор: maxdm Перейти к цитате
А в хранилище компьютера корневой сертификат не остался?


Еще раз проверил. Его там нету, я его удалил оттуда. А может он висеть где-то в кэше винды?
Offline Kirill Sobolev  
#6 Оставлено : 24 октября 2013 г. 16:20:13(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
Еще раз проверил. Его там нету, я его удалил оттуда. А может он висеть где-то в кэше винды?

Сертификат откройте в окошке и посмотрите на цепочку. Если там есть корневой - значит где-то остался.
Техническую поддержку оказываем тут
Наша база знаний
Offline gladiator87  
#7 Оставлено : 24 октября 2013 г. 16:27:05(UTC)
gladiator87

Статус: Новичок

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

Сказал(а) «Спасибо»: 1 раз
Автор: Kirill Sobolev Перейти к цитате
Цитата:
Еще раз проверил. Его там нету, я его удалил оттуда. А может он висеть где-то в кэше винды?

Сертификат откройте в окошке и посмотрите на цепочку. Если там есть корневой - значит где-то остался.


Там отображается корневой и написано что к нему нет доверия, т.к. он не найден в доверенных корневых сертификатах.
Как я понимаю винда его показывает через url указанный в "Доступ к сведениям центра сертификации" проверяемого сертификата.
Online Андрей Писарев  
#8 Оставлено : 24 октября 2013 г. 16:30:12(UTC)
Андрей *

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

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

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
Автор: gladiator87 Перейти к цитате
Автор: Kirill Sobolev Перейти к цитате
Цитата:
Еще раз проверил. Его там нету, я его удалил оттуда. А может он висеть где-то в кэше винды?

Сертификат откройте в окошке и посмотрите на цепочку. Если там есть корневой - значит где-то остался.


Там отображается корневой и написано что к нему нет доверия, т.к. он не найден в доверенных корневых сертификатах.
Как я понимаю винда его показывает через url указанный в "Доступ к сведениям центра сертификации" проверяемого сертификата.


Нет, сертификат пользователя может в себя включать и сертификат УЦ.

Техническую поддержку оказываем тут
Наша база знаний
Offline gladiator87  
#9 Оставлено : 24 октября 2013 г. 16:44:01(UTC)
gladiator87

Статус: Новичок

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

Сказал(а) «Спасибо»: 1 раз
Автор: Андрей * Перейти к цитате
Автор: gladiator87 Перейти к цитате
Автор: Kirill Sobolev Перейти к цитате
Цитата:
Еще раз проверил. Его там нету, я его удалил оттуда. А может он висеть где-то в кэше винды?

Сертификат откройте в окошке и посмотрите на цепочку. Если там есть корневой - значит где-то остался.


Там отображается корневой и написано что к нему нет доверия, т.к. он не найден в доверенных корневых сертификатах.
Как я понимаю винда его показывает через url указанный в "Доступ к сведениям центра сертификации" проверяемого сертификата.


Нет, сертификат пользователя может в себя включать и сертификат УЦ.




Разобрал с помощью certutil - сертификат УЦ не включен.
Так что если я правильно понимаю, он все же проверяет цепочку через мое файловое хранилище сертификатов.
Поэтому повторю вопрос, можно ли заставить его проверять только через мое хранилище?
Offline Максим Коллегин  
#10 Оставлено : 24 октября 2013 г. 20:58:36(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,457
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 39 раз
Поблагодарили: 750 раз в 645 постах
Судя по документации - именно это и происходит. Эти поля появились только в Windows 7, а мы с таким использованием не сталкивались.
http://msdn.microsoft.co...p/aa377184(v=vs.85).aspx
Знания в базе знаний, поддержка в центре поддержки
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
Андрей * оставлено 24.10.2013(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.