码迷,mamicode.com
首页 > Windows程序 > 详细

如何将USBKey中的证书注册到Windows系统中

时间:2015-03-08 12:59:04      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:

本篇文章就介绍一下如何使用微软CAPI接口完成将USBKey中的证书注册到Windows系统中。

(1)        获取CSP句柄。

CryptAcquireContext(
&hTokenProv,NULL,
“EnterSafe ET199Auto CSP V1.0”,
PROV_RSA_FULL,
NULL)

(2)        获取USBKey内密钥句柄,这时要注意锁内密钥的类型是签名密钥(AT_SIGNATURE)或者交换密钥(AT_KEYEXCHANGE)。

CryptGetUserKey(hTokenProv,AT_KEYEXCHANGE,&hKeyCAPI)

(3)        获取证书数据(只是证书信息数据,不包括私钥),这时可以通过两次调用,先获取证书数据的长度,分配空间,然后再调用一次。

CryptGetKeyParam(hKeyCAPI, KP_CERTIFICATE, pbCert, &dwCertLen, 0)

(4)        创建CERT_CONTEXT结构

pCertContext = CertCreateCertificateContext(
                PKCS_7_ASN_ENCODING | X509_ASN_ENCODING,
                pbCert,
                dwCertLen)

(5)        打开MY存储区,这个就是Windows系统中“个人”证书存放的区域。

hSysStore = CertOpenStore(
CERT_STORE_PROV_SYSTEM_REGISTRY,
        0,
        0,
        CERT_SYSTEM_STORE_CURRENT_USER,
        L"MY");

(6)        设置证书上下文属性。这时要先声明CRYPT_KEY_PROV_INFO结构

CRYPT_KEY_PROV_INFO ckpi = {0};

        ckpi.pwszProvName = L" EnterSafe ET199Auto CSP V1.0";
        ckpi.pwszContainerName = pbWideContainer;
        ckpi.dwProvType = PROV_RSA_FULL;
        ckpi.dwKeySpec = AT_KEYEXCHANGE;
        ckpi.dwFlags = CERT_KEY_CONTEXT_PROP_ID;
        ckpi.cProvParam = 0;
        ckpi.rgProvParam = NULL;

CertSetCertificateContextProperty(
pCertContext,
CERT_KEY_PROV_INFO_PROP_ID, CERT_STORE_NO_CRYPT_RELEASE_FLAG,
&ckpi)

(7)        将证书注册到Windows系统中。

CertAddCertificateContextToStore(
hSysStore,
        pCertContext,
        CERT_STORE_ADD_REPLACE_EXISTING,
        NULL);

(8)        释放CSP句柄。

CryptReleaseContext(hTokenProv,0)

通过上述步骤就可以将ET199Auto中的证书注册到Windows系统中了。我们可以在IE?Internet选项?内容?证书?个人下面查看到ET199Auto中的证书。

如何将USBKey中的证书注册到Windows系统中

标签:

原文地址:http://www.cnblogs.com/whbCNW/p/4321478.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!