| ||||
| ||||
Строю цепочку сертификатов, используя связку CertCreateCertificateChainEngine и CertGetCertificateChain. Код взял из http://www.cryptopro.ru/cryptopro/forum/view.asp?q=2772 // Create the nondefault certificate chain engine. if(!CertCreateCertificateChainEngine(&ChainConfig,&hChainEngine)) return FALSE; 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. CERT_CHAIN_REVOCATION_CHECK_CHAIN, NULL, // Currently reserved. &pChainContext)) // Return a pointer to the chain created. Предположим, что все в порядке. Но для верификации цепочки, что является конечной целью, необходимо использование CertVerifyCertificateChainPolicy. BOOL WINAPI CertVerifyCertificateChainPolicy( LPCSTR pszPolicyOID, PCCERT_CHAIN_CONTEXT pChainContext, PCERT_CHAIN_POLICY_PARA pPolicyPara, PCERT_CHAIN_POLICY_STATUS pPolicyStatus ); - так она описана в MSDN. Для меня загвоздка заключается в правильном заполнении поля pPolicyPara, а говоря точнее в заполнении поля pvExtraPolicyPara структуры PCERT_CHAIN_POLICY_PARA. pvExtraPolicyPara The address of a pszPolicyOID-specific structure that provides additional validity policy conditions. Это описание поля из MSDN. А теперь вопрос, а откуда я могу узнать, структуру для какого pszPolicyOID мне надо использовать. Я так понимаю, что это определяется при анализе расширений, связанных с Police, каждого сертификата в цепочке. Подскажите плиз. | ||||
Ответы: | ||||
| ||||
Вот тут есть соотвествие между pszPolicyOID и pvExtraPolicyPara http://msdn2.microsoft.com/en-gb/library/aa377163.aspx | ||||
| ||||
Спасибо. Эту страничку уже видел раньше. И есть один вопрос: 1. Я скачал с этого сайта файлик sample-2-0.zip. Там в файле WebClient.c обнаружил функцию : static DWORD VerifyServerCertificate( PCCERT_CONTEXT pServerCert, PSTR pszServerName, DWORD dwCertFlags) { В ней подставляется в поле pszPolicyOID значение CERT_CHAIN_POLICY_SSL. Есть ли гарантия, что верификация цепочки с учетом возможных policy extensions (в RFC очень немало этому внимания уделятся при описании верификации цепи) будет проведена корректно, согласно описанию в упомянутом уже RFC. Добавлю, что значение dwAuthType у меня должно быть AUTHTYPE_CLIENT (в примере AUTHTYPE_SERVER). | ||||