我必须找出智能卡中是否有特定的证书。为此,我首先使用CryptAcquireContext获取HCRYPTPROV (CSP句柄),然后使用它打开系统存储(OpenSystemStore),然后枚举证书。
它在Windows上运行得很好。在Windows 7上,由于存储在商店中的陈旧/旧证书,它会产生问题。Windows从智能卡存储/复制其存储区中的证书。这意味着如果我在智能卡上有两个证书,Cert1和Cert2,并且我已经使用智能卡登录到窗口。然后Windows将这些证书存储在它的商店中,我们可以通过访问IE->Internet选项->Contents>证书来看到这些证书。然后,如果我从智能卡中删除Cert2,那么Cert2也会显示在Windows中,这个东西破坏了我的代码。
因此,我需要枚举仅在智能卡上可用的证书,而不是在Windows商店中。
发布于 2013-05-21 21:28:23
假设您获取的HCRYPTPROV用于智能卡,则使用CryptGetProvParam和PP_USER_CERTSTORE参数:
获取智能卡的用户证书存储。此证书存储区包含存储在智能卡上的所有用户证书。
例如:
HCERTSTORE hCertStore = NULL;
DWORD size = sizeof(hCertStore);
CryptGetProvParam(hProv, PP_USER_CERTSTORE, (PBYTE)&hCertStore, &size, 0);然后,可以像系统存储一样,从HCERTSTORE枚举智能卡的证书。
MSDN页面声明"Windows :不支持此参数“。但是它在XP上使用最新的Service很好。
CNG等效为具有NCryptGetProperty参数的NCRYPT_USER_CERTSTORE_PROPERTY。
https://stackoverflow.com/questions/16570083
复制相似问题