OpenSSL X509 Funtion
OpenSSL X509 Funtion
来源:https://blog.csdn.net/wanjie518/article/details/6570141
现有的证书大都采用X509规范, 主要同以下信息组成:版本号、证书序列号、有效期、拥有者信息、颁发者信息、其他扩展信息、拥有者的公钥、CA对以上信息的签名。
OpenSSL实现了对X509数字证书的所有操作。包括签发数字证书、解析和验证证书等。
涉及证书操作的主要函数有验证证书(验证证书链、有效期、CRL)、解析证书(获得证书的版本、序列号、颁发者信息、主题信息、公钥、有效期等)
主要函数
1、DER编码转换为内部结构函数
X509 *d2i_X509(X509 **cert, unsigned char **d, int len);
函数功能:把一个DER编码的证书数据转化成OpenSSL内部结构体。
参数:cert:[OUT]X509结构体。 D:[IN]DER编码的证书数据指针地址。Len[IN]证书数据长度;
返回值:编码后的X509结构体数据
2、获得证书版本函数X509_get_version
#define X509_get_version(x) ASN1_INTEGER_get((x)->cert_info->version)
参数:x:[IN]X509*结构体数据结构。
返回值:证书版本,数据类型“LONG”
3、获得证书序列号函数
ASN1_INTEGER *X509_get_serialNumber(X509 *x);
返回值:证书序列号,数据类型“ASN1_INTEGER”.
4、获得证书颁发者信息函数
X509_NAME *X509_get_issuer_name(X509 *a);
注*:X509_NAME结构体包括多个X509_NAME_ENTRY结构体。X509_NAME_ENTRY保存了颁发者的信息,这些信息包括对象和值(object 和value)。对象的类型包括国家、通用名、单位、组织、地区、邮件等。
5、获得证书拥有者信息函数
X509_NAME *X509_get_subject_name(X509 *a);
6、获得证书有效期的起始日期函数
#define X509_get_notBefore(x) ((x)->cert_info->validity->notBefore)
返回值: 证书起始有效期,数据类型“ASN1_TIME”
7、获得证书有效期的终止日期函数
#define X509_get_notAfter(x) ((x)->cert_info->validity->notAfter)
8、获得证书公钥函数
EVP_PKEY *X509_get_pubkey(X509 *x);
9、创建和释放证书存储区
X509_STORE *X509_STORE_new(void);
Void X509_STORE_free(X509_STORE *v);
函数功能:创建和释放一个X509_STORE结构体, 主要用于验证证书。
10、向证书存储区添加证书
Int X509_STORE_add_cert(X509_STORE *ctx, X509 *x);
函数功能:添加信任的根证书到证书存储区。
返回值:1成功,否则为0
11、向证书存储区添加证书吊销列表
Int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x);
功能:添加CRL到证书存储区。
参数:x:[IN]证书吊销列表。Ctx:[IN]证书存储区。
返回值:1成功, 否则为0。
12、创建证书存储区上下文环境函数
X509_STORE_CTX *X509_STORE_CTX_new(void);
返回值:操作成功返回证书存储区上下文环境指针,否则返回NULL。
13、释放证书存储区上下文环境
Void X509_STORE_CTX_free(X509_STORE_CTX *ctx);
14、初始化证书存储区上下文环境函数
Int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, X509 *x509, STACK_OF(X509) *chain);
函数功能:初始化证书存储区上下文环境,设置根证书、待验证的证书、CA证书链。
15、验证证书函数
Int X509_verify_cert(X509_STORE_CTX *ctx);
返回值:验证成功返回1,否则返回0
在进行身份认证时,首先要对发送给服务器进行认证的x509证书有效性进行验证,在Openssl中,可以用一个API接口可以实现:int X509_verify_cert(X509_STORE_CTX *ctx);
接口中形参是X509_STORE_CTX(X509证书库上下文)类型,在X509证书库上下文中,存在一个X509证书库和一个待验证的X509证书,可以加入信任的证书链,也可以加入CRL证书链(证书撤销列表)~
对X509证书有效性进行验证可以由以下几个函数来完成~
X509_STORE_CTX *ctx; //证书上下文
X509_STORE *cert_store; //证书库,存在证书链
X509* x509; //待验证X509证书
ctx = X509_STORE_CTX_new();
X509_STORE_CTX_init(ctx,cert_store,x509,NULL);
X509_verify_cert(ctx);//根据返回值可以确认X509证书是否有效,也可以根据X509_STORE_CTX_get_error和X509_verify_cert_error_string函数来确认无效原因
//确定在cert_store中存在根证书 ,如果不存在则会出现certificate signature failture,可以使用X509_STORE_get_by_subject查看是否在证书库中存在某证书
参考 https://blog.csdn.net/liao20081228/category_7058952.html
https://github.com/z0x010/rdesktop/blob/d20e6f496c15fdf121b89886711ab7157f026933/rdpproxy/trunk/x509test.c
https://github.com/CTSRD-TESLA/TESLA/blob/77d80afab1d3ed32403c9581847c0f927912ae08/demos/openssl-api/openssl-api.c
https://github.com/nthien/pulp/blob/f8c9aa19eea3dd9478fdace778f651691d4d4818/playpen/certs/chain_example/c_api_examples/cert_validation.c
https://github.com/jwmatthews/ssl_cert_scripts/blob/df833c74e76ec8cdc8769a2c883a3d5e10620b43/chain_example/c_api_examples/cert_validation.c
=========== End
OpenSSL X509 Funtion的更多相关文章
- 10.openssl x509
主要用于输出证书信息.也能够用于签名.自签名.转换证书格式.还原证书为证书请求等.该命令非常强大,几乎实现了伪命令req,ca,verify,crl的所有功能,最牛的一点是该命令不需要通过配置文件就能 ...
- Openssl x509命令
一.简介 x509指令是一个功能很丰富的证书处理工具.可以用来显示证书的内容,转换其格式,给CSR签名等 二.语法 openssl x509 [-inform DER|PEM|NET] [-outfo ...
- openssl x509(签署和自签署)
openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 主要用于输出证书信息,也能够签署证书请求文件.自签署.转换证书格式等. op ...
- openssl - X509证书操作函数
原文链接: http://blog.csdn.net/zqt520/article/details/26965797 现有的证书大都采用X.509规范,主要同以下信息组成:版本号.证书序列号.有效期. ...
- (14) openssl x509(签署和自签署)
主要用于输出证书信息,也能够签署证书请求文件.自签署.转换证书格式等. openssl x509工具不会使用openssl配置文件中的设定,而是完全需要自行设定或者使用该伪命令的默认值,它就像是一个完 ...
- openssl、x509、crt、cer、key、csr、ssl、tls 这些都是什么鬼?
今天尝试在mac机上搭建docker registry私有仓库时,杯具的发现最新的registry出于安全考虑,强制使用ssl认证,于是又详细了解linux/mac上openssl的使用方法,接触了一 ...
- 【openssl】利用openssl完成X509证书和PFX证书之间的互转
利用openssl完成X509证书和PFX证书之间的互转 # OpenSSL的下载与安装: 1.下载地址: 官方网址—— https://www.openssl.org/source/ OpenSSL ...
- openssl命令行工具简介 - 指令x509
原文链接: http://blog.csdn.net/allwtg/article/details/4982507 openssl命令行工具简介 - 指令x509 用法: open ...
- 关于x509、crt、cer、key、csr、pem、der、ssl、tls 、openssl等
关于x509.crt.cer.key.csr.pem.der.ssl.tls .openssl等 TLS:传输层安全协议 Transport Layer Security的缩写 TLS是传输层安全协议 ...
随机推荐
- docker-Harbor仓库映像
部署环境: centos-7.2 docker-engine-1.12.5 docker-compose-1.9.0 harbor-0.5.0 1.下载所需的软件包(以下需要-翻-墙-下载的地方你们自 ...
- 【转】Android原生PDF功能实现
1.背景 近期,公司希望实现安卓原生端的PDF功能,要求:高效.实用. 经过两天的调研.编码,实现了一个简单Demo,如上图所示.关于安卓原生端的PDF功能实现,技术点还是很多的,为了咱们安卓开发的同 ...
- sensor【学习笔记】
高通sensor相关介绍不错的文章:https://www.cnblogs.com/linhaostudy/archive/2018/03/16/8578414.html 高通sensor的校准流程: ...
- 干掉搜狗输入法云代理SogouCloud.exe
搜狗输入法暂时还离不开,但是很讨厌搜狗输入法一直在后台的"搜狗云代理程序"(C:\Program Files (x86)\SogouInput\9.1.0.2657\SogouCl ...
- swap 释放
#swap 释放 -------------------------------- swapoff -a wwapon -a
- (转)ES6系列——let和const深入理解
原文:https://juejin.im/post/59e6a86d518825422c0cbb6f https://www.cnblogs.com/slly/p/9234797.html-----l ...
- java多线程(五)线程通讯
1.1. 为什么要线程通信 多个线程并发执行时,在默认情况下CPU是随机切换线程的,有时我们希望CPU按我们的规律执行线程,此时就需要线程之间协调通信. 1.2. 线程通讯方式 线程间通信常用方式如下 ...
- SpringBoot入门-MongoDB(五)
安装MongoDB 安装MongoDB MongoDB用户.数据库相关命令操作 https://www.jianshu.com/p/237a0c5ad9fa # 创建用户以及角色 use spring ...
- 【Git】PHP项目自动化部署的注意事项
直接开始 1 服务器克隆项目 git clone git@*****.com/project.git 2 更改所有者 chown www:www /www/wwwroot/project/* -R 3 ...
- MongoDB开发深入之一:文档数据关系模型详解(一对多,多对多)
文档关联模型通常有3种方式: 嵌入式(一对一.一对多) 后期手动统一ID处理(一对多.多对多) References引用(一对一.一对多) 文档树模型通常有3种方式: 父引用(Parent Refer ...