上面四个属性是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. 详解for循环(各种用法)

    常见的for循环一般是一下代码这种结构: for (int i = 0; i < 100; i++){    Console.WriteLine(i);} 或者递减的:              ...

  2. win7录屏工具

    psr.exe http://jingyan.baidu.com/article/aa6a2c14d330710d4d19c47c.html

  3. Generic Netlink详解

    netlink socket是一种用于用户态进程和内核态进程之间的通信机制.它通过为内核模块提供一组特殊的API,并为用户程序提供了一组标准的socket接口的方式,实现了全双工的通讯连接. Netl ...

  4. js实现简单易用的上下无缝滚动效果

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. (基础篇)PHP与JavaScript交互

    一.了解javascript Javascript是脚本编程语言,支持WEB应用程序的客户端和服务器端构件的开发,在WEB系统中得到了非常广泛的应用. 1. 什么是javascript Javascr ...

  6. ui学习笔记---第十五天数据库

    数据库的使用 常见的数据库有MySQL       SQL Server       SQLite      Oralce等 在iOS开发中通常使用SQLite数据库,这是一个轻量级的数据库,可以在火 ...

  7. Java-->实现断点续传(下载)

    --> 断点续传: 就像迅雷下载文件一样,停止下载或关闭程序,下次下载时是从上次下载的地方开始继续进行,而不是重头开始... --> RandomAccessFile --> poi ...

  8. poj 3264 线段树 求区间最大最小值

    Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same ...

  9. Objective-c——UI基础开发第七天(自定义UITableView)

    一.梗概: 1.自定义:headerView,footerVie,Cell等 2.双模型(遵循单一原则,类或模型实现的功能尽量单一) 3.计算文本的方法(针对不同文本内容而设置的宽高等) 4.设置fo ...

  10. java基础之:匿名内部类

    在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以 了解到匿名内部类的使用.匿名内部类要注意的事项.如何初 ...