| ||||
| ||||
Хочу получить указатель на CRL следующим образом: PCCRL_CONTEXT pCRLContext=0; pCRLContext=CertGetCRLFromStore( hSystemStore, NUUL, NULL, CERT_STORE_BASE_CRL_FLAG); но компилятор говорит следующее: [C++ Error] Unit1.cpp(40): E2034 Cannot convert 'int' to 'unsigned long *' [C++ Error] Unit1.cpp(40): E2342 Type mismatch in parameter 'pdwFlags' (wanted 'unsigned long *', got 'int') И что нужно указывать во втором параметре? | ||||
Ответы: | ||||
| ||||
Ошибка не во втором а в четвером параметре. Нужен указатель Т.е. дб что-то типа PCCRL_CONTEXT pCRLContext=0; DWORD dwFlags=CERT_STORE_BASE_CRL_FLAG; pCRLContext=CertGetCRLFromStore( hSystemStore, NUUL, NULL, &dwFlags); | ||||
| ||||
Передал 4-ый параметр как ссылку, установил новые списки CRL, но все равно функция возвращает ошибку -2146885628. В чем может быть дело? | ||||
| ||||
А у Вас ХР? | ||||
| ||||
Да XP. | ||||
| ||||
Это ошибка "Объект или свойство не найдено". Не находит CRL по какой-то причине | ||||
| ||||
А что надо писать во втором параметре? | ||||
| ||||
контекст сертификата издателя | ||||
| ||||
Он получается функцией CertFindCertificateInStore? или есть какя-то другая, для этих целей? | ||||
| ||||
Зависит от того, откуда и как Вы его получаете Если поиском в хранилище то да, CertFindCertificateInStore вполне подойдет | ||||
| ||||
Вот так должен быть получен контекст CRL. HCERTSTORE hStoreHandleCheck; hStoreHandleCheck=CertOpenStore( CERT_STORE_PROV_SYSTEM, 0, NULL, CERT_SYSTEM_STORE_CURRENT_USER, L"MY"); DWORD dwFlagsCheck=CERT_STORE_BASE_CRL_FLAG; PCCRL_CONTEXT pCRLContext=0; pCRLContext=CertGetCRLFromStore( hStoreHandleCheck, NULL, NULL, &dwFlagsCheck); | ||||
| ||||
в предыдущем посте был вопрос | ||||
| ||||
CRL как правило (и по умолчанию) ставятся в Промежуточные ЦС ("CA"), но никак не в Личные ("MY"). Вы уверены, что он у Вас именно в Личных лежит? | ||||
| ||||
Он у меня лежит в Промужуточные центры сертификации\список отзыва сертификатов. Тогда вместо "MY", надо "CA". | ||||
| ||||
Спасибо помогло. Аесли у меня несколько списков отозванных сертификатов, то какой будет выбираться функцией? | ||||
| ||||
Неизвестно. Любой может быть выбран. | ||||
| ||||
А как тогда поступить? если есть несколько CA. | ||||
| ||||
Ищите тот, который выпущен нужным Вам СА. | ||||
| ||||
Можно как-нибудь из CRL вытащить адрес до него на сервере, ну чтобы скажем если пользователь хочет воспользоваться сертификатом, я проверяю его на отозванность, если оказывается так что CRL просрочен то сразу открывался бы обозреватель на нужной странице? | ||||
| ||||
Если в CRL есть расширение CDP (обычно есть), то из него можно вытащить | ||||
| ||||
Требуется найти CRL выпущенный CA контекст сертификата которого я получаю следующим образом: pCaCert = CertFindCertificateInStore( hStoreHandle, MY_ENCODING_TYPE, 0, CERT_FIND_SUBJECT_STR, signerCA, NULL); где signerCA это указатель на буффер в котором содержиться имя УЦ, здесь все нормально. Далее хочу получить контекст CRL который лежит в локальном хранилище, в промежуточных центрах сертификации: DWORD dwFlagsCheck=CERT_STORE_BASE_CRL_FLAG; pCRLContext=CertGetCRLFromStore( hStoreHandleCheck, pCaCert, NULL, &dwFlagsCheck); Но контекст CRL получить не удается, код ошибки 2148081668? В чем может быть дело? | ||||
| ||||
в дополнение к предыдущему посту. Если в хранилище оставить всего один CRL то он обнаруживается функцией pCRLContext=CertGetCRLFromStore( hStoreHandleCheck, NULL,//pCaCert, NULL, &dwFlagsCheck); | ||||
| ||||
А действительно в хранилище лежить base CRL для этого ЦС? | ||||
| ||||
А как получить base CRL? Я получал CRL через вэб интерфейс УЦ. | ||||
| ||||
КриптоПро УЦ не работает с base/delta CRL. Попробуйте с DWORD dwFlagsCheck=0 | ||||
| ||||
DWORD dwFlagsCheck=0 так тоже не получается. Может есть у кого рабочий пример? | ||||
| ||||
Значит поиск не по тому сертификату ЦС сам код то верный Попробуйте проверить найденный CRL ОК сертификата ЦС по которому ищете | ||||
| ||||
а что такое ОК? | ||||
| ||||
открытый ключ функция для проверки - CryptVerifyCertificateSignatureEx | ||||
| ||||
Не могли бы вы пояснить что нужно передавать в следующих параметрах? pvSubject dwIssuerType pvIssuer | ||||
| ||||
pvSubject - pCRLContext dwIssuerType - CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT pvIssuer - pCaCert | ||||
| ||||
Hello! Good Site! Thanks you! dzqykktnvtzx | ||||