VC++网络安全编程范例(1)--数字证书有效期验证
数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供了一种在Internet上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构-----CA机构,又称为证书授权(Certificate Authorit y)中心发行的,人们可以在网上用它来识别对方的身份。数字证书是一个经证书授权 中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一 个公开密钥、名称以及证书授权中心的数字签名。一般情况下证书中还包括密钥的有 效时间,发证机关(证书授权中心)的名称,该证书的序列号等信息,证书的格式遵循 ITUT X.509国际标准
一个标准的X.509数字证书包含以下一些内容:
证书的版本信息;
证书的序列号,每个证书都有一个唯一的证书序列号;
证书所使用的签名算法;
证书的发行机构名称,命名规则一般采用X.500格式;
证书的有效期,现在通用的证书一般采用UTC时间格式,它的计时范围为1950-2049;
证书所有人的名称,命名规则一般采用X.500格式;
证书所有人的公开密钥;
证书发行者对证书的签名
代码如下,分析见源码
#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,// 查找标准为:证书客体名称为szSubjectNameszSubjectName, // 证书客体名称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++网络安全编程范例(2)-创建自签名证书
数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密.解密.每个用户自己设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名:同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享, ...
- vc++网络安全编程范例(19)实现数字信封打包与拆解
数字信封是将对称密钥通过非对称加密(即:有公钥和私钥两个)的结果分发对称密钥的方法. PKCS#7中将数字信封作为术语进行定义,而在正文中对进行了如下解释:数字信封包含被加密的内容和被加密的用于加密该 ...
- vc++网络安全编程范例(14)-openssl bio编程
OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库.SSL协议库以及应用程序.OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的. 作为一个基于密码学的安全开发包,OpenS ...
- java对数字证书的验证_JAVA对数字证书的常用操作
一:需要包含的包 import java.security.*; import java.io.*; import java.util.*; import java.security.*; impor ...
- 非对称加密与数字证书
文章目录 1 非对称加密 2 数字签名 3 数字证书 4 数字签名和数字证书的区别 5 CA 认证中心如何保证权威性 6 HTTPS 协议 7 HTTPS 与 SSL 8 为什么不一直使用HTTPS ...
- 数字签名和数字证书使用详解
目录 1.数字签名 (1)数字签名的应用场景 (2)数字签名的实现原理 (3)如何进行数字签名和验证 (4)使用数字签名的优点和缺点 2.数字证书 (1)如何对数字证书进行颁发和管理 (2)颁发数字证 ...
- 数字签名和数字证书详解
原文件地址:http://www.tuicool.com/articles/7buueeQ 密钥分为两种:对称密钥和非对象密钥 对称密钥算法:DES 3DES AES,加密算法快 非对称密钥算法:RA ...
- Java加密与解密的艺术~数字证书详解
数字证书具备常规加密/解密必要的信息,包含签名算法,可用于网络数据加密/解密交互,标识网络用户(计算机)身份.数字证书为发布公钥提供了一种简便的途径,其数字证书则成为加密算法以及公钥的载体.依靠数字证 ...
- https:浏览器如何验证数字证书
浏览器和服务器建立https连接的过程中,浏览器首先会向服务器请求数字证书,之后浏览器要做的第一件事情就是验证数字证书: 验证数字证书的有效期 验证数字证书是否被吊销 验证数字证书是否是合法CA机构颁 ...
最新文章
- 【paddlepaddle速成】paddlepaddle图像分类从模型自定义到测试
- JDBC有这一篇就够了(万字JDBC附代码详解)
- MacBook 如何通过命令终端进入 U 盘内的目录
- 大数据之-Hadoop3.x_Yarn_基础架构---大数据之hadoop3.x工作笔记0141
- Monkey稳定性测试,多少还是要了解一下的(上)
- 选择性搜索(selective search)+opencv实现
- HDU3782 xxx定律【数学计算+水题】
- SLAM学习笔记 - ORB_SLAM2源码运行及分析
- 2021最新大厂面试题集锦
- java中==与equals的区别及理解_Java开发中常量池的理解与归纳
- CSDN账号注销的问题:手机号注册的CSDN号是可以注销的
- 六年级计算机应用计划,小学三到六年级信息技术教学计划及进度表.doc
- 基于spss的偏相关分析(partial correlation analysis)
- 【Pix4d精品教程】打开Pix4DMapper时提示Pix4DMapper.exe已停止工作的完全解决办法
- win10系统优化与防范策略
- 计算机组成原理————寄存器寻址方式大总结
- Carplay车载语音通讯测试(Vehicle Communication Terminals Test)
- 显示一个立方体的斜二测图(用数组存放正方体的各顶点坐标)
- 计算机视觉 响应_视觉响应式布局的自动化测试
- ida 动态调试so库 (连接夜神模拟器)
热门文章
- python如何群控手机_python调用adb脚本来实现群控安卓手机初探
- 工业机器人:机电IT融合破局
- Dapper.Contrib
- C#ORM框架Dapper封装
- linux蓝牙服务关闭,使用linux的hciconfig命令配置蓝牙设备
- 外行怎么快速林java_我自学编程,只为月薪过万,就这么简单!(外行也可看)...
- MyZip Pro for Mac(专业解压缩工具)
- 良心推荐,一款PDF转JPG图片的免费在线工具
- 17joys用户管理 添加用户
- Ubuntu18.04 中的文件管理器