您的位置:首页 > 理论基础 > 计算机网络

VC++网络安全编程范例(1)--数字证书有效期验证--学习笔记

2013-04-09 00:29 761 查看
一、准备工作

1步、必须在#include前进行宏定义

#ifndef _WIN32_WINNT

#define _WIN32_WINNT 0xXXXX //其中0xXXXX对应于下面Windows版本宏定义中的0x0XXX,不同操作系统版本对应不同。

//

// _WIN32_WINNT version constants

//

#define _WIN32_WINNT_NT4 0x0400

#define _WIN32_WINNT_WIN2K 0x0500

#define _WIN32_WINNT_WINXP 0x0501

#define _WIN32_WINNT_WS03 0x0502

#define _WIN32_WINNT_WIN6 0x0600

#define _WIN32_WINNT_VISTA 0x0600

#define _WIN32_WINNT_WS08 0x0600

#define _WIN32_WINNT_LONGHORN 0x0600

#define _WIN32_WINNT_WIN7 0x0601

2步、必须包涵3个头文件和1个宏定义:

#include <stdio.h>

#include <windows.h>

#include <wincrypt.h>

#define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING) //这句的具体用处我还没弄清楚

3步、具体代码如下:

void main(void)

{

//------------------------------------------------------------------------------------------------------------------------------------------------------

//变量申请与初始化

HCERTSTORE hSystemStore;

PCCERT_CONTEXT pTargetCert = NULL;

PCERT_INFO pTargetCertInfo;

char szSubjectName[] = "China-wuhan-ruanou"; //证书客体名称,应保证此证书在证书库中有效

//------------------------------------------------------------------------------------------------------------------------------------------------------

//打开系统证书库

if(hSystemStore = CerOpenStore( //以前用的是=号,我改成==,不知道正确不

CERT_STORE_PROV_SYSTEM, //系统证书库

0, //编码类型,默认?

NULL, //使用默认的CSP

CERT_SYSTEM_STORE_CURRENT_USER, //系统库存储位置

L"MY" //系统库名称,其中L“MY”前的L不懂什么意思

)

)

{

printf("打开系统证书库成功。MY证书库已经打开。\n");

}

else

{

HandleError("打开根证书库出错。");

}

//------------------------------------------------------------------------------------------------------------------------------------------------------

//系统证书库中查询证书

if(pTargetCert = CertFindCertificateInStore(

hSystemStore, //证书库句柄,系统证书库

MY_ENCODING_TYPE, //编码类型

0, //不需要设置标志位

CERT_FIND_SUBJECT_STR_A, //查找标准为:证书客体名称为szSubjiectName

szSubjiectName, //证书客体名称

pTargetCert //上次查找到的证书,第一次查找,从证书库开始位置查找

)

)

{

printf("找到了此证书。\n");

}

else

{

HandleError("未能找到所需的证书。");

}

//------------------------------------------------------------------------------------------------------------------------------------------------------

//证书有效期验证

pTargetCertInfo = pTargetCert->pCertInfo;

switch(CertVerifyTimeValidity(

NULL, // 使用当前时间

pTargetCertInfo // 欲验证有效期的证书指针

)

)

{

case -1 :

{

printf("证书无效. \n");

break;

}

case 1:

{

printf("证书已过期. \n");

break;

}

case 0:

{

printf("证书的时间有效. \n");

break;

}

};

//-----------------

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: