⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 certverifytimevalidity.cpp

📁 本程序利用VC++6.0自带的密码学相关函数库实现数字签名证书的验证
💻 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 + -