上面四个属性是CertSetCertificateContextProperty或CertGetCertificateContextProperty可以为证书上下文设置的几个属性,下面对它们的关联简单的进行分析(其中的意义我也不太清楚):

通过CERT_KEY_CONTEXT_PROP_ID属性,我们可以为证书上下文设置一个CERT_KEY_CONTEXT结构体,在MSDN中,我们可以看到结构体的定义:

typedef struct _CERT_KEY_CONTEXT {
DWORD cbSize;
HCRYPTPROV hCryptProv;
DWORD dwKeySpec;
} CERT_KEY_CONTEXT, *PCERT_KEY_CONTEXT;
设置CERT_KEY_PROV_HANDLE_PROP_ID属性时,首先获取CERT_KEY_CONTEXT_PROP_ID属性,获得CERT_KEY_CONTEXT结
构体,根据MSDN,如果CERT_KEY_CONTEXT_PROP_ID属性不存在,则创建CERT_KEY_CONTEXT_PROP_ID属性,

以上分析是基于开源代码和MSDN,不涉及windows内部细节,只供参考,开源代码来源:

CERT_KEY_CONTEXT结构体中hCryptProv元素为设置CERT_KEY_PROV_HANDLE_PROP_ID属性时输入的参数,dwKeySpec元素
为CERT_KEY_PROV_INFO_PROP_ID属性对应的CRYPT_KEY_PROV_INFO结构体中dwKeySpec;如果存在属性
CERT_KEY_CONTEXT_PROP_ID属性,则首先判断设置CERT_KEY_PROV_HANDLE_PROP_ID属性时输入的参数dwFlags是否
存在CERT_STORE_NO_RELEASE_FLAG标志,如果不存在,则要手动释放CERT_KEY_CONTEXT结构体中hCryptProv对应的
CSP,如果存在,则可以不用管,然后,更新CERT_KEY_CONTEXT中的hCryptProv元素(使用输入的参数)。

设置CERT_KEY_SPEC_PROP_ID时,根据MSDN,首先获取CERT_KEY_CONTEXT_PROP_ID属性,获得CERT_KEY_CONTEXT结
构体,如果CERT_KEY_CONTEXT_PROP_ID属性不存在,则创建CERT_KEY_CONTEXT_PROP_ID属性,对应CERT_KEY_CONTEXT结构
体中hCryptProv元素设为0,dwKeySpec元素设为输入的参数;如果CERT_KEY_CONTEXT_PROP_ID属性存在,则更新对应结构体
CERT_KEY_CONTEXT中的dwKeySpec元素,使用输入的参数。
关于这几个属性的使用,网上资料实在是少,我基本也没接触过,所以我也不知道如果去使用这些属性,这里只是对它们的联系作以下简单的
分析,微软的MSDN上也进行了简短的说明。

http://www.koders.com/c/fidE5BEC613BE70EF0FF4028C5F0B8C103AE0CEC21F.aspx

CERT_KEY_CONTEXT_PROP_ID,CERT_KEY_PROV_INFO_PROP_ID,CERT_KEY_PROV_HANDLE_PROP_ID和CERT_KEY_SPEC_PROP_ID的更多相关文章

  1. windows p12(pfx)个人证书安装过程

    证书库个人证书存储区为其中的每个证书维护一个属性CERT_KEY_PROV_INFO_PROP_ID,该属性指定了证书对应的密钥容器的相关信息,包括密钥容器名,CSP名称,CSP类型,密钥用途,以及C ...

  2. CryptAPI 数字签名 与 Openssl 验证签名

    这段时间要实现一个认证协议,分为客户端和服务器端,客户端使用windows操作系统,服务器端使用linux操作系统,在客户端下(windows),使用windows证书库中的签名证书对消息进行签名(使 ...

  3. Windows密钥容器和证书的关系

    其实CSP主要是对容器里的密钥对操作的,和证书关系不大. 容器里的密钥对有两种类型:一种是AT_KEYEXCHANGE,表示加密的密钥对,一种是AT_SIGNATURE表示签名的密钥对. 由于美国的出 ...

  4. 2019-2020-2 20174314王方正 《网络对抗》 Exp0 Kali安装

    本博旨记录安装Kali的具体步骤. 一.Vmware的安装 略. 二.Vmware的配置 选择[文件]-[新建虚拟机]. 出现新建虚拟机导向,按照以下图示配置每一步.

随机推荐

  1. 如何用cufflinks 拼出一个理想的注释文件

    后记: cufflinks安装: 下载安装包, 不要下载source code ,直接下载binary.    Source code    Linux x86_64 binary http://cu ...

  2. 转载几篇关于GNU autotools的文章

    http://www.laruence.com/2009/11/18/1154.html http://www.ibm.com/developerworks/cn/linux/l-makefile/ ...

  3. Queue及Stack

    Queue 她是一个接口,有多冢实现方式(LinkedList.ArrayDeque等) 类别 方法 入队 add.offer(优先级高) 出队 remove.poll 查询 element.peek ...

  4. List-ApI及详解

    1.API : add(Object o) remove(Object o) clear() indexOf(Object o) get(int i) size() iterator() isEmpt ...

  5. JAVA 23种设计模式(转)

    1.FACTORY?追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了.麦当劳和肯德基就是生产鸡翅 ...

  6. Codeforces Flipping game 动态规划基础

    题目链接:http://codeforces.com/problemset/problem/327/A 这道题目有O(N^3)的做法,这里转化为动态规划求解,复杂度是O(N) #include < ...

  7. c++将引用作为函数的参数---6

    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 引用经常被用作函数参数,使得函数中的变量名成为调用程序中的变量别名.这种传递参数 的方法称为按引用传递. ...

  8. poj2367 拓扑序

    题意:有一些人他们关系非常复杂,一个人可能有很多后代,现在要制定一种顺序,按照前辈在后代前排列就行 拓扑序裸题,直接建边拓扑排序一下就行了. #include<stdio.h> #incl ...

  9. 编码规范(二)之Code Templates的设置(转)

    http://swiftlet.net/archives/1199 编码规范(二)之Code Templates的设置(转) 文件(Files)注释标签:/** * @Title: ${file_na ...

  10. Java——集合框架 工具

     /* * Arrays工具类的使用 */ public class ArraysTest { public static void main(String[] args) { // TODO A ...