gpt4 book ai didi

Windows CRYPT32 CertFreeCertificateChainEngine 从受信任的根权限中删除用户证书

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:16 24 4
gpt4 key购买 nike

我将用户证书添加到受信任的 CA(例如 HandyCache 应用程序的证书)。
然后使用另一个应用程序,它初始化CertificateChainEngine并检查加密连接上的证书,初始化代码如下:

CERT_CHAIN_ENGINE_CONFIG config = { sizeof(config) };
config.dwFlags = CERT_CHAIN_CACHE_END_CERT;
HCERTCHAINENGINE engine;
::CertCreateCertificateChainEngine(&config, &engine);

完成一些工作后,我关闭了一个应用程序,引擎被销毁了:

::CertFreeCertificateChainEngine

这个函数内部有一个奇怪的行为:提到的用户证书在调用过程中从 Trusted CA 中删除,堆栈如下:

CRYPT32!RegDeleteKeyExW
CRYPT32!ILS_DeleteElementFromRegistry+0x4e
CRYPT32!ShipAssertUserRootStoreCertificateAddition+0x13d
CRYPT32!IPR_DeleteUnprotectedRootsFromStore+0x8e
CRYPT32!ResyncFromRegistry+0xdc
CRYPT32!RegistryNotifyChange+0x38
CRYPT32!RegStoreProvControl+0x8e
CRYPT32!CertControlStore+0x4c
CRYPT32!ControlCollectionStore+0x61
CRYPT32!CertControlStore+0x2c
CRYPT32!ControlCollectionStore+0x61
CRYPT32!CertControlStore+0x2c
CRYPT32!CCertChainEngine::~CCertChainEngine+0xf9
CRYPT32!CCertChainEngine::`scalar deleting destructor'+0xd
CRYPT32!CCertChainEngine::Release+0x1d
CRYPT32!CertFreeCertificateChainEngine+0x23

用户证书在 CRYPT32!RegDeleteKeyExW 中被删除。

所以,我有一个问题:
为什么 CertFreeCertificateChainEngine 可以决定从用户受信任的 CA 存储中删除所有自定义证书?
任何可以控制这种行为的未记录的初始化标志的想法?

UPD:在 Windows 7 和 Windows 8.1 上复制

最佳答案

在调试器中的 IE 中捕获::CertCreateCertificateChainEngine,发现 IE 使用以下初始化标志:

0x30 // CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE | CERT_CHAIN_ENABLE_SHARE_STORE

将问题应用程序中的标志更改为

config.dwFlags = CERT_CHAIN_CACHE_END_CERT | 
CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE | CERT_CHAIN_ENABLE_SHARE_STORE;

Trusted CA 的用户证书在引擎免费时不会被删除
不知道,为什么缺少这些标志会影响证书删除。

关于Windows CRYPT32 CertFreeCertificateChainEngine 从受信任的根权限中删除用户证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34400608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com