现在的位置: 首页 > 综合 > 正文

CSP开发基础–数字证书调用CSP过程

2013年08月07日 ⁄ 综合 ⁄ 共 2848字 ⁄ 字号 评论关闭

      加密服务提供程序 (CSP) 是执行身份验证、编码和加密服务的程序,基于 Windows 的应用程序通过 Microsoft 加密应用程序编程接口 (CryptoAPI) 访问该程序。每个 CSP 提供不同的 CryptoAPI 实现。某些提供更强大的加密算法,而另外一些则使用硬件组件(如USBkey)。密钥对的产生是证书申请过程中重要的一步,其中产生的私钥由用户保留,公钥和其他信息则交于CA中心进行签名,从而产生证书。根据证书类型和应用的不同,密钥对的产生也有不同的形式和方法。对普通证书和测试证书,一般由浏览器或固定的终端应用来产生,这样产生的密钥强度较小,不适合应用于比较重要的安全网络交易。而对于比较重要的证书,如商家证书和服务器证书等,密钥对一般由专用应用程序或CA中心直接产生,这样产生的密钥强度大,适合于重要的应用场合。 

CA系统颁发证书时对CSP的调用流程。

1. 首先通过浏览器登录CA服务器界面http://servername/certsrv,其中其中servername 是要访问的证书颁发机构所在的 Windows Web
服务器的IP地址。

  

2. 选择任务:"申请证书"

 

3. 提交一个"高级证书申请"。

4. 通过步骤3,此时可有两种数字证书申请的方法,分别为

   (1) 创建并向此CA提交一个申请。(此方法可以称之为直接使用CSP进行申请,因为此过程中大部分工作均在后台由CSP完成,用户看不到更多细节)

   (2) 使用base64编码的CMC或PKCS#10提交证书申请······(此方法要求先产生P10请求然后再申请证书,相比于方法(1),此方法是将请求文件单独拿出,如果无法连接能够联机处理证书申请的证书颁发机构,则需要使用该选项)。

4.1 直接使用CSP申请证书:

4.1.1 点击"创建并向此CA提交一个申请",会得到一个表单(如图示),按照表单提示用户需要填写三部分内容:

  • 识别信息:数字证书申请者的身份资料信息。
  • 需要的证书类型:客户端身份验证信息。
  • 密钥选项:“使用的加密服务提供程序(CSP”、“密钥类型(交换,签章,两者)、"建立新的密钥组(或使用现存的密钥对)"、"密钥长度"、"自动命名密钥容器(或指定密钥容器名称)"、"私钥是否可导出"、"是否对私钥添加强口令保护"其它选项:证书格式(CMC或PKCS10),散列算法(SHA1)

4.1.2. 用户个人资料信息填写完毕,点击确定后,该申请中的信息先从申请程序发送到 CryptoAPI。CryptoAPI 通过计算机中的advapi.dll与crypt32.dll间接地调用CryptoSPI向用户在步骤1中选择的“加密服务提供程序(CSP)”(此处的CSP是安装在计算机上或计算机可以访问的设备上) 提供正确的数据。

4.1.3. 根据步骤4.1中的密钥选项生成密钥对。

    (1) 如果 CSP 是基于软件的,则它在计算机上生成一个公钥和一个私钥,这两个密钥通常称为密钥对。

    (2) 如果 CSP 是基于硬件(如USBkey中内嵌的CSP)的,则它指导一个硬件生成密钥对。

      上述两种方式均为通过调用CrypyAPI函数实现:

                                                      

4.1.4.  密钥对生成后,导出公钥(上面流程的第3步),同时对私钥进行强保护。

    对私钥的保护分为:

    (1) 基于软件的 CSP 将对私钥进行口令加密(要求用户输入私钥保护口令),从而保护私钥的安全;

    (2) 基于硬件的USBkey的内置 CSP 将私钥存储在flash芯片内,逻辑上是保存在独属于用户的密钥容器内,通过硬件的访问控制加强对私钥的保护。

4.1.5. 将导出的公钥连同步骤1中用户填写的表单中的信息按照步骤1"其他选项"选择的"证书格式"PKCS10(或CMC)的规则构造证书请求,构造完成后将证书请求发送给CA。(此处假设用户注册机构RA与CA合并一起,并未明确分开)

 

4.2 使用方法(2)先产生P10证书请求申请数字证书。

4.2.1 点击"使用base64编码的CMC或PKCS#10提交证书申请······",会得到要求输入P10文件的页面。

4.2.2 将请求文件的内容粘贴至空白处即可。

  打开“记事本”。在“文件”菜单中,单击“打开”。选择 PKCS #10 或CMC文件,然后单击“打开”。在“编辑”菜单上,单击“全选”,然后单击“编辑”菜单上的“复制”。在网页中,单击“保存的申请”滚动框。单击“编辑”菜单上的“粘贴”,将证书申请的内容粘贴到滚动框中。注意:此处不能使用word打开,因为word会自动添加回车符。

4.2.3 此时点击提交,将证书请求提交给CA

下面补充一下如何得到PKCS#10或CMC文件。

在步骤4.1.1中,其中在其它选项中包括申请格式(CMC或者PKCS#10),还有保存申请的复选框,只要将此处勾选,并设置好路径,前面选择的申请格式PKCS#10保存后就是P10请求,同理,选择的CMC,保存的请求文件就是CMC格式。

由于我们设置的路径是D:\test,保存申请成功后,我们可以进入我的电脑进行查看

使用记事本打开test文件后可以看到按照PKCS#10规则构造的证书请求

5. CA根据自己的策略对申请者信息进行审核。对申请审核通过后生成数字证书。将证书请求中提取出的公钥与用户身份信息填写到CERT_INFO结构中。

   CERT_INFO的定义如下:

typedef struct _CERT_ INFO {
	DWORD dwVersion;        //证书版本
	CRYPT_INTEGER_BLOB SerialNumber;       //序列号
	CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;     //签名算法
	CERT_NAME_BLOB Issuer;   //颁发者
	FILETIME NotBefore;   //有效期(起)
	FILETIME NotAflee;    //有效期(止)
	CERT_NAME_BLOB Subject;   //拥有者
	CERT_PUBLIC_KEY_INFO SubiectPublicKevInfo;  //用户公钥
	CRYPT_BIT_BLOB IssuerUniqueId;    //颁发者唯一标识
	CRYPT_BIT_BLOB SubjectUniqueId;    //拥有者唯一标识
	DWORD cExtension;    //扩展项数
	PCERT_EXTENSION rgExtension;    //扩展
	} CERT_INFO, *PCERT_INFO;

   将上述结构信息按照散列算法得到摘要信息,利用CA私钥对摘要信息签名,上述(用户信息  + 用户公钥  + CA签名) 构成合法的用户数字证书

6. CA将数字证书颁发给申请人,并通知申请人安装数字证书,同时将用户信息发布到LDAP服务器供其他用户查询。

7. 证书申请人安装数字证书。可以选择将该证书安装在计算机或硬件设备上适当的证书存储中。

抱歉!评论已关闭.