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;
}
};
//-----------------
}
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;
}
};
//-----------------
}
相关文章推荐
- VC++网络安全编程范例(1)--数字证书有效期验证
- VC++网络安全编程范例(1)--数字证书有效期验证
- vc++网络安全编程范例(18)-open ssl 实现数字证书编程
- VC++网络安全编程范例(4)-创建自签名证书打包与拆解
- VC++网络安全编程范例(4)-创建自签名证书打包与拆解
- VC++网络安全编程范例(8)-摘要签名和验证编程实现
- VC++网络安全编程范例(2)-创建自签名证书
- vc++网络安全编程范例(19)实现数字信封打包与拆解
- VC++网络安全编程范例(8)-摘要签名和验证编程实现
- vc++网络安全编程范例(14)-openssl bio编程
- VC++网络安全编程范例(3)-消息鉴别码MAC算法编程
- VC++网络安全编程范例(11)-SSL高级加密网络通信
- VC++网络安全编程范例(11)-SSL高级加密网络通信(转)
- VC++网络安全编程范例(5)-创建创建密钥容器和密钥
- VC++网络安全编程范例(12)-PKI编程
- vc++网络安全编程范例(13)-openssl engine编程
- vc++网络安全编程范例(15)-导出会话密钥
- vc++网络安全编程范例(17)-open ssl 实现文件加密与解密
- vc++网络安全编程范例(14)-openssl bio编程
- vc++网络安全编程范例(16)-open ssl 哈希编码解码数据