文章目录

  • 1.X509概览
  • 2.x509结构
  • 3.x509主要函数

1.X509概览

X.509标准是密码学里公钥证书的格式标准。X.509 证书己应用在包括TLS/SSL(WWW万维网安全浏览的基石)在内的众多 Internet协议里,同时它也有很多非在线的应用场景,比如电子签名服务。X.509证书含有公钥和标识(主机名、组织或个人),并由证书颁发机构(CA)签名(或自签名)。一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息一种非常通用的证书格式,所有的证书都符合X.509 国际标准。

2.x509结构

目前X.509有不同的版本,但是每个版本都包含了这些信息:
1.Version ——X509的版本号
2.Serial Number——证书序列号
3.Signature algorithm ——签名所使用的算法,就是指的这个数字证书的对指纹进行签名时所使用的加密算法,这样就可以使用证书发布机构的证书里面的公钥,根据这个算法对签名进行解密。指纹(也叫hash值)摘要后再用私钥加密结果就是数字签名。
4.Signature hash algorithm——签名哈希算法
5.Issuer—— 证书的发布机构,指出是什么机构发布的这个证书,也就是指明这个证书是哪个公司创建的(只是创建证书,不是指证书的使用者)。
6.Valid from , Valid to——证书的有效期,也就是证书的有效时间,或者说证书的使用期限。 过了有效期限,证书就会作废,不能使用了。
7.Subject (主题)——这个证书是发布给谁的,或者说证书的所有者,一般是某个人或者某个公司名称、机构的名称、公司网站的网址等。
其实就是我们在之前进行证书填写时的必要信息。

8.Public key (公钥)——这个我们在前面介绍公钥密码体制时介绍过,公钥是用来对消息进行加密的。
9.Thumbprint, Thumbprint algorithm (指纹以及指纹算法)——这个是用来保证证书的完整性的,也就是说确保证书没有被修改过。 其原理就是在发布证书时,发布者根据摘要算法(一个hash算法)计算整个证书的hash值(也叫指纹)并用私钥加密后成为签名和证书放在一起,使用者在打开证书时,先用公钥解密签名,获得指纹,然后自己根据摘要算法计算一下证书的hash值(指纹),如果和附带的指纹对的上,就说明证书没有被修改过,因为证书的内容被修改后,根据证书的内容计算的出的hash值(指纹)是会变化的。

获得一份X.509证书,必须请求CA发给你证书。用户提供自己的公钥,并提供有关自己的某些特定信息。然后在这些信息上用私钥做数字签名,并将整个数据包(称为证书请求)发给CA。CA做一些努力来验证用户提供的信息是正确的,然后就生成证书并返回给用户。

3.x509主要函数

1、 DER编码转换为内部结构函数

X509 *d2i_X509(X509 **cert, unsigned char **d, int len);

函数功能:把一个DER编码的证书数据转化成OpenSSL内部结构体。
参数:cert:[OUT]X509结构体。 D:[IN]DER编码的证书数据指针地址。Len证书数据长度;
返回值:编码后的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);

该函数设置证书请求人的主题名,X509_NAME *name参数就是要设置的主题名。
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:证书吊销列表。Ctx:证书存储区。
返回值: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

16.X509_REQ* X509_REQ_dup(X509_REQ *req);
复制一份X509_REQ结构。它是宏定义,实际上是由ASN1_dup函数来完成复制工作。

17.X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, constEVP_MD *md);

对X509_REQ中X509_REQ_INFO结构用pkey与md进行签名,并用算法标识与签名值填充X509_REQ中的sig_alg与signature域。
成功返回字节数,失败返回0.

18.X509_REQ_verify(X509_REQ *a, EVP_PKEY *r);
与签名相对应,对签名进行验证,所以将公钥pkey传入就可以了。

参考:
1.https://blog.csdn.net/liao20081228/article/details/77411458
2.https://blog.csdn.net/zqt520/article/details/26965797

Openssl学习——x509证书函数相关推荐

  1. 通过OpenSSL解析X509证书基本项

    在之前的文章"通过OpenSSL解码X509证书文件"里,讲述了如何使用OpenSSL将证书文件解码,得到证书上下文结构体X509的方法.下面我们接着讲述如何通过证书上下文结构体X ...

  2. 【openssl】利用openssl完成X509证书和PFX证书之间的互转

    利用openssl完成X509证书和PFX证书之间的互转 # OpenSSL的下载与安装: 1.下载地址: 官方网址-- https://www.openssl.org/source/ OpenSSL ...

  3. 利用openssl生成X509证书

    利用openssl生成X509证书 1.生成密钥 openssl genrsa -out test.key 2048 2.生成cert证书(sha512/sha256/sha1要根据实际算法) ope ...

  4. java解码p7b证书文件,通过OpenSSL解码X509证书文件

    在Windows平台下,如果要解析一个X509证书文件,最直接的办法是使用微软的CryptoAPI.但是在非Windows平台下,就只能使用强大的开源跨平台库OpenSSL了.一个X509证书通过Op ...

  5. 通过openssl学习ssl证书。

    通过抓包学习ssl:https://www.cnblogs.com/xiaxveliang/p/13183175.html 通过openssl学习ssl:http://3ms.huawei.com/k ...

  6. OPENSSL X509证书验证

    openssl实现了标准的x509v3数字证书,其源码在crypto/x509和crypto/x509v3中.其中x509目录实现了数字证书以及证书申请相关的各种函数,包括了X509和X509_REQ ...

  7. openssl解析国密X509证书

    openssl解析国密X509证书,把公钥拿出来重写一下就行了         x = strToX509(pbCert, pulCertLen); dwRet = getCertPubKey(x,  ...

  8. OpenSSL 使用拾遗(二)---- X509 证书的 SKID/AKID 字段

    SKID(证书使用者密钥标识符,subject key identifier 的简称)和 AKID(证书颁发机构密钥标识符,authority key identifier 的简称)是 X509 证书 ...

  9. openssl 编程。 证书制作

    首页 博客 学院 下载 GitChat TinyMind 论坛 问答 商城 VIP 活动 写博客 发Chat 登录注册 么刚的专栏 RSS订阅 原 openssl证书制作及编程 2010年07月29日 ...

  10. 关于X509证书和密钥的概念

    证书概述 证书主要包括颁发者和被办法者的信息,以及被颁发者的公钥,和CA机构对这些信息的认证, 主要内容: **版本** 识别用于该证书的 X.509 标准的版本,这可以影响证书中所能指定的信息.迄今 ...

最新文章

  1. 网友为对百合所唱的最后的挽歌!(节选)
  2. 2020暑期实习后台开发字节跳动笔试
  3. PyTorch cat() 函数实现维度拼接
  4. ubuntu 简单配置samba
  5. 30万总奖金·垃圾分类挑战赛进入最后冲刺(附baseline完整分享)
  6. 微课|Python三种方法统计各分数段内的人数(17分钟)
  7. http响应返回的状态码
  8. python和c 的区别-Python和C区别该如何理解?如何适应这种区别?
  9. OpenSSL之PKey的EVP封装
  10. 多维多重背包问题_动态规划--背包问题
  11. 如何利用百度音乐播放器的API接口来获取高音质歌曲
  12. ERWIN中表结构导出到doc文件中
  13. 《Xenogears》(异度装甲)隐含的原型与密码
  14. Wrong JPEG library version :library is 80,caller expects 62
  15. Codeforces 869E. The Untended Antiquity (二维Fenwick,Hash)
  16. 区分event对象中的[clientX,offsetX,screenX,pageX]
  17. CSDN原力计划之技术影响力企业博客英雄榜 TOP 50 发布!
  18. 尺子英语怎么读计算机英语怎么读,尺子英语怎么读
  19. 临界资源、临界区、信号量、P,V操作
  20. 大疆软件经纬度偏差消除

热门文章

  1. Python:从UCI数据库下载数据集到内存
  2. 2020年杭州电子科技大学计算机考研经验分享
  3. SpringCloud学习
  4. django提供的admin后台增加用户时提示:“Table ‘login.login_user‘ doesn‘t exist“
  5. thinkphp5.0.20 数据库迁移/填充
  6. oracle 绑定变量语法,Delphi使用绑定变量法操作Oracle
  7. 《刘润·5分钟商学院》学习总结01
  8. ABB伺服驱动调试(三)
  9. python cmp_to_key
  10. matlab 分组求平均值,MATLAB:取一个列表中两个数字的平均值?(MATLAB: taking the average of two numbers in a list?)...