CSP应用开发-将USBkey中的证书注册到Windows系统

本文介绍了一种USB接口硬件设备——USBKey,并详细讲解了如何使用微软CAPI接口将USBKey中的数字证书注册到Windows系统的过程。USBKey内置高性能智能卡芯片,用于存储用户的私钥及数字证书,确保用户身份认证的安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转自和讯博客坚实诚金 http://zyf860825.blog.hexun.com/61812512_d.html
USBKey是一种USB接口的硬件设备。如坚石诚信的ET199Auto,内置16位国外进口高性能智能卡芯片,有一定的存储空间,可以存储用户的私钥以及数字证书,利用USBKey内置的RSA公私钥算法实现对用户身份的认证。由于用户私钥保存在ET199Auto中,同时智能卡可以很好的防止物理攻击/边频攻击等窃取手段,从而有效保证任何方式都无法读取ET199Auto中的私钥,因此保证了用户认证的安全性。
目前,USBKey已广泛应用在网上银行,网上办公,证券交易,网络游戏等众多系统中。那么USBKey又怎么与应用系统连接而进行身份认证的呢?实际上,USBKey中存储者代表用户身份的数字证书。一张数字证书包括:证书信息+公钥+私钥,其中证书+公钥是可以公开的,私钥是在USBKey中,任何人都无法获取的。当USBKey插入计算机后,USBKey厂商提供的中间件程序会将证书信息注册到Windows系统中,应用系统中在认证时通过Windows系统找到用户证书,该证书通过USBKey厂商的中间件找到USBKey中对应的私钥,然后在USBKey中使用私钥进行签名运算,将结果传给服务器认证。过程如下:
网银àWindows系统中用户证书àUSBKey中间件à私钥签名à服务器验证
本篇文章就介绍一下如何使用微软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中的证书。

======================================================= 目录 & 说明 ======================================================= ECCdemo 通过PKCS#11接口创建ECC密钥对,并进行签名和验签操作; ------------------------------------------------------- EnumObj 通过PKCS#11接口列举出Token中的各种对象,如证书,公钥,私钥,秘密密钥; ------------------------------------------------------- exportcert 通过PKCS#11接口输出Token中的证书的一些属性; ------------------------------------------------------- FormatKey 格式化Token,并重新划分公私有区大小,设置PIN码重试次数和密钥对数量。 ------------------------------------------------------- GetUSBInfos 通过PKCS#11接口获得slot, cryptoki, token的属性信息; ------------------------------------------------------- GuoMiTest 通过PKCS#11接口产生ssf33和scb2密钥,并进行加解密运算; ------------------------------------------------------- HMACTest 通过PKCS#11接口产生GENERIC SECRET密钥,并进行HMAC-SHA1功能验证; ------------------------------------------------------- InitToken 通过PKCS#11接口实现初始化操作,并进行Ansi和Utf8字符转换; ------------------------------------------------------- OTPDemo 通过PKCS#11接口产生HOTP密钥,并产生OTP结果; ------------------------------------------------------- PKCSDemo 通过PKCS#11接口创建RSA密钥对,并进行签名、加密、签名验证和解密的运算; ------------------------------------------------------- PKCStest 通过PKCS#11接口产生多种类型的密钥,如DES/3DES/RC2/RC4/RSA,并进行加解密运算; ------------------------------------------------------- 注:除Microsoft Visual C++外,你需要另外安装 Microsoft Platform SDK,并把SDK安装目录中的 include目录和lib目录分别放置在VC开发环境选项 (对于VC6来说,是菜单中Tools->Options...弹出的 对话框中的Directories页)中的目录(include) 和库(lib)中VC++的路径之前才能够正确编译链接运 行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值