📄 certverifytimevalidity.cpp
字号:
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
#include <stdio.h>
#include <windows.h>
#include <wincrypt.h>
#define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)
void HandleError(char *s);
void main(void)
{
//-------------------------------------------------------------------
// 变量申明与初始化
HCERTSTORE hSystemStore;
PCCERT_CONTEXT pTargetCert=NULL;
PCERT_INFO pTargetCertInfo;
char szSubjectName[] = "China-wuhan-ruanou";
// 证书客体名称,应保证此证书在证书库中有效
//-------------------------------------------------------------------
// 打开系统证书库
if(hSystemStore = CertOpenStore(
CERT_STORE_PROV_SYSTEM, // 系统证书库
0, // 编码类型,这里不需要
NULL, // 使用默认的CSP
CERT_SYSTEM_STORE_CURRENT_USER,//系统库存储位置
L"MY")) // 系统库名称
{
printf("打开系统证书库成功. MY 证书库已经打开. \n");
}
else
{
HandleError( "打开根证书库出错.");
}
//-------------------------------------------------------------------
// 在系统证书库中查询证书
if(pTargetCert = CertFindCertificateInStore(
hSystemStore, // 证书库句柄,系统证书库
MY_ENCODING_TYPE, // 编码类型
0, // 不需要设置标志位
CERT_FIND_SUBJECT_STR_A,// 查找标准为:证书客体名称为szSubjectName
szSubjectName, // 证书客体名称
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;
}
};
//-------------------------------------------------------------------
// 释放内存
if (pTargetCert)
CertFreeCertificateContext(pTargetCert);
if(hSystemStore)
{
if (!CertCloseStore(
hSystemStore,
CERT_CLOSE_STORE_CHECK_FLAG))
HandleError("Could not close the certificate store");
}
printf("此证书已经被释放且证书库已经关闭. \n");
printf("此证书验证程序运行完成"
"无错. \n");
} // End of main
// HandleError:错误处理函数,打印错误信息,并退出程序
void HandleError(char *s)
{
printf("程序执行发生错误!\n");
printf("%s\n",s);
printf("错误代码为: %x.\n",GetLastError());
printf("程序终止执行!\n");
exit(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -