usbkey证书认证的原理求解
以最常用的使用RSA证书、支持标准的CSP的key来说。
通常厂家会提供一个key驱动,安装完后,实际上就是安装注册了一个CSP
到window系统上,而且会在检查到usbkey插入的时候,将key里面的用户证书注册到证书库上,一般这个证书在"个人"下。
然后在自己的客户端应用程序上,利用wininet进行https连接请求,需要验证客户端证书的时候,枚举证书并设置关联的证书为上面那个证书库的用户证书,这个过程在http://www.codeproject.com/Articles/3898/Connecting-to-a-HTTPS-server-with-SSL-using-Winine,有详细介绍。但是始终想不明白的一个地方是
InternetSetOption(hRequest,INTERNET_OPTION_CLIENT_CERT_CONTEXT,(void*)pCert,sizeof(CERT_CONTEXT));
设置好后,winnet中的函数HttpSendRequest如何知道用户证书对应的CSP和usbkey,然后利用到usbkey中的私钥进行签名数据信息等操作。
真不知道这个用户证书如何和对应的usbkey的csp关联起来的,微软那些不开源的库里,究竟做了些什么工作,求高手指点。
------解决方案--------------------usbkey运行环境安装后会安装一个管理工具。
此工具会监控usbkey插拔。
usbkey插入的话。
会将key内的证书注册都ms的cert store。
此信息就包含csp和容器等信息。
也就是通过证书就可以与csp关联。
cryptapi有函数可以枚举到系统内注册的证书并且读取证书信息。