Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро CSP 5.0
»
CertAddCertificateContextToStore + CertGetCertificateChain, кеширование
Статус: Новичок
Группы: Участники
Зарегистрирован: 12.02.2022(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 2 раз
|
1. Пытаюсь получить цепочку сертификатов для сертификата, у которого отсутствует корневой, с помощью CertGetCertificateChain с параметром CERT_CHAIN_REVOCATION_CHECK_CHAIN. Ожидаемо получаю ошибки: CERT_TRUST_IS_UNTRUSTED_ROOT, CERT_TRUST_REVOCATION_STATUS_UNKNOWN, CERT_TRUST_IS_OFFLINE_REVOCATION; 2. Добавляю корневой сертификат в хранилище ROOT (текущего юзера) с помошью CertAddCertificateContextToStore (предварительно корректно открывая и закрывая хранилище); 3. Повторно вызываю CertGetCertificateChain и получаю те же ошибки, что и в п. 1. Если после п.2 добавить sleep(100 msecs), то все работает корректно. Такое ощущение, что либо CertGetCertificateChain что-то кратковременно кеширует, либо CertAddCertificateContextToStore асинхронно обновляет хранилище. Пробовал CertControlStore с параметром CERT_STORE_CTRL_COMMIT - не помогает. Windows 10, CryptoPro-5.0.12800.exe, но тестировщики наблюдают эту ошибку и с другими версиями. Отредактировано пользователем 15 июня 2023 г. 11:29:23(UTC)
| Причина: Не указана
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 02.11.2017(UTC) Сообщений: 69  Сказал «Спасибо»: 14 раз Поблагодарили: 31 раз в 28 постах
|
Здравствуйте!
CryptoAPI на Windows реализовано не нами, так что всех деталей про их реализацию мы, увы, не знаем.
В порядке мозгового штурма могу набросить пару идей. Идеи не проверял, просто озвучиваю.
1. Функция CertResyncCertificateChainEngine сбрасывает кэши chain engine. Если вы явно не передавали в CertGetCertificateChain chain engine, то неявно использовали chain engine по умолчанию: [in, optional] hChainEngine A handle of the chain engine (namespace and cache) to be used. If hChainEngine is NULL, the default chain engine, HCCE_CURRENT_USER, is used. This parameter can be set to HCCE_LOCAL_MACHINE. Возможно, его кэши можно сбросить через CertResyncCertificateChainEngine.
2. Возможно, создание своего chain engine через CertCreateCertificateChainEngine и его использование в CertGetCertificateChain может вам помочь. Возможно, на этот хэндл тоже надо будет вызывать CertResyncCertificateChainEngine. |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 12.02.2022(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 2 раз
|
Добрый день, спасибо за ответ! п.1 - казалось бы, как раз то что нужно, но не работает. п.2 - вроде работает, но нет понимания, почему это помогло) Я создаю chain engine с хранилищами, аналогичными тем, что в chain engine по умолчанию (HCCE_CURRENT_USER), это по идее не должно влиять на результат. Возможно, там внутри где-то есть просто sleep(...), который и так помогает (если собирать в дебаге, то тоже все работает без приседаний). UPD: п. 2 - если создаю chain engine, но не использую ее в CertGetCertificateChain, то тоже помогает) Отредактировано пользователем 15 июня 2023 г. 15:56:05(UTC)
| Причина: Не указана
|
|
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро CSP 5.0
»
CertAddCertificateContextToStore + CertGetCertificateChain, кеширование
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close