簡體   English   中英

Windows CRYPT32 CertFreeCertificateChainEngine從受信任的根權限中刪除用戶證書

[英]Windows CRYPT32 CertFreeCertificateChainEngine removes user certificate from trusted root authority

我將用戶證書添加到Trusted 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的用戶證書。
不知道,為什么這些標志缺失會影響證書的刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM