在前面的文章中,我们生成了一个X.509格式的证书,并使用openssl x509子命令详细查看了这个证书的详细内容,我们知道使用openssl命令所生成的cert结尾的证书文件实际上是PEM格式的文件,这个文件是二进制文件内容的base64编码,这篇文章我们通过还原这个文件来确认一些证书相关的信息,并结合此证书的内容对X.509格式进行进一步理解。

事前准备

准备一个使用X.509格式的证书, 详细可参看:

  • https://liumiaocn.blog.csdn.net/article/details/103482436
[root@liumiaocn certificate]# ls cert-test.crt
cert-test.crt
[root@liumiaocn certificate]# file cert-test.crt
cert-test.crt: PEM certificate
[root@liumiaocn certificate]#

二进制的base64编码的反向确认

证书内容的确认

[root@liumiaocn certificate]# cat cert-test.crt
-----BEGIN CERTIFICATE-----
MIIEATCCAumgAwIBAgIUVOFIbnAdeDKvwhkPPRKWaRM4hqEwDQYJKoZIhvcNAQEL
BQAwgY8xCzAJBgNVBAYTAkNOMREwDwYDVQQIDAhMaWFvTmluZzEPMA0GA1UEBwwG
RGFMaWFuMQ8wDQYDVQQKDAZkZXZvcHMxEDAOBgNVBAsMB3VuaWNvcm4xEzARBgNV
BAMMCmRldm9wcy5jb20xJDAiBgkqhkiG9w0BCQEWFWxpdW1pYW9jbkBvdXRsb29r
LmNvbTAeFw0xOTEyMDkyMTQwMTRaFw0yOTEyMDYyMTQwMTRaMIGPMQswCQYDVQQG
EwJDTjERMA8GA1UECAwITGlhb05pbmcxDzANBgNVBAcMBkRhTGlhbjEPMA0GA1UE
CgwGZGV2b3BzMRAwDgYDVQQLDAd1bmljb3JuMRMwEQYDVQQDDApkZXZvcHMuY29t
MSQwIgYJKoZIhvcNAQkBFhVsaXVtaWFvY25Ab3V0bG9vay5jb20wggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHv/Gl40eGuK/3R63KHkRqG6fKDJZHPv1h
ZsmVvHoq//U3qv69wtMMatZ99pKwn6Ki6r1y5m/Pzs028lKFgYnAY8M1e/9iMYox
z/qkCQXYmUXvZKSZtEscPbb03WmD9IyqrBudVy8yAJHj5cDeYkrg5Y+lVJV214K9
oKgg5qQ3zWxuAcgTAKVfQY/M3b0v6DkREARzhOPdKTKjRpdOb3s4bKqrWGI/vGpH
a6oB12s/gf4j2mc+j/jIOHC7r0UobBr1rePR9oSq0wIV8Mo+dqq+VMkcHCiXUGdk
5Um8BYVefU6DrPAFkOXVbyUU4riVluLgjZctJvNB81R6Ggc4rw4RAgMBAAGjUzBR
MB0GA1UdDgQWBBSGRn1mOPW921/A5p9UODxNNIXZMzAfBgNVHSMEGDAWgBSGRn1m
OPW921/A5p9UODxNNIXZMzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA
A4IBAQC5LpJ9ZggHPvbDskrQJ103Kgm9Oz8PoDgax3XXujmJnghnatb3cq0MO8Fz
GdhvXLsiIyoR1yH9x46YpDEK98oU0YG5bTpOrfNZwLxGjGHN1s6bpYpD23zLiaf1
xLuGkw2twSjk7iZF6I4feGcKkfrvxRS3fIXbbRsjVe+Ra0cx7eLdB6kv41+VE2GQ
Uhp85gnuq0ZEB/weLc+SOa/GwUp6+TTf/6lHn3ZxJ23jcmYsWyyO3d5VPetozxF6
Ez1tErJ89HkYnCDXonLM/sUOdL18QTYDJlwSn+SohxYfG2dFNH1KBYN7qFaLWtxC
15I5GVDQVgjpGAI4giLwhMO8pYRW
-----END CERTIFICATE-----
[root@liumiaocn certificate]#

上文一堆看似乱码的内容就是证书的内容,但是我们知道这实际上正是PEM的格式,因为PEM的格式如下所示:

-----BEGIN CERTIFICATE-----
证书二进制内容的base64编码
-----END CERTIFICATE-----

反向验证

所以我们只需要对中间的内容进行反向的base64解码,然后将解码的内容生成文件,此文件即为还原的证书的二进制文件了。然后使用strings命令来确认一下此二进制文件中是否包含我们在创建时输入过的内容,如果包含,则能说明这确实是我们所创建的内容。

  • 还原证书的二进制文件
[root@liumiaocn certificate]# cat cert-test.crt |grep -v CERTIFICATE |base64 -d >key_bin.private
[root@liumiaocn certificate]#
  • 确认二进制文件格式
[root@liumiaocn certificate]# file key_bin.private
key_bin.private: data
[root@liumiaocn certificate]#
  • 确认二进制文件内容
[root@liumiaocn certificate]# strings key_bin.private
LiaoNing1
DaLian1
devops1
unicorn1
devops.com1$0"
liumiaocn@outlook.com0
191209214014Z
291206214014Z0
LiaoNing1
DaLian1
devops1
unicorn1
devops.com1$0"
liumiaocn@outlook.com0
No{8l
...省略
[root@liumiaocn certificate]#

从上述的字符片段中我们多少能够确认处一些前文在此证书创建时所输入的内容,比如Subject的内容 LiaoNing、DaLian以及邮件地址等。

通过-text信息比对X.509格式

X.509

X.509是公钥证书的标准格式,早在1988年7月3日,X.509和X.500一起发布,通常现在大家所提到的X.509指的是X.509 v3(在RFC 5280中定义)。在X.509里,组织机构通过发起CSR证书签名请求,从证书颁发机构CA获得一份签名的证书。在能够进行证书的签名之前,需要首先生成非对称密钥对,使用私钥对CSR请求进行签名,由于CSR包含了发起者的身份信息和CA要求的其他身份证明的相关信息,CA使用私钥对其进行签名的时候会根据此内容生成一份证书,这就是X.509格式的证书的申请和生成的流程。

X.509证书内容

X.509 v3的证书是使用ASN.1来进行描述的

ANSI.1 介绍:
ASN.1(Abstract Syntax Notation One) 是一套标准,是描述数据的表示、编码、传输、解码的灵活的记法。它提供了一套正式、无歧义和精确的规则以描述独立于特定计算机硬件的对象结构,最初是1984年的CCITT X.409:1984的一部分。由于其广泛应用,1988年ASN.1移到独立标准X.208,1995年进行全面修订后变成X.680系列标准。

X.509 v3证书中主要包含如下内容:

  • 证书的版本号
  • 证书的序列号
  • 证书签名算法
  • 证书的颁发者
  • 证书有效期:此日期前无效 (NotBefore)
  • 证书有效期:此日期后无效(NotAfter)
  • 证书主题
  • 证书公钥
  • 证书公钥算法
  • 证书颁发者唯一身份信息(可选项)
  • 证书主题唯一身份信息(可选项)

以前文创建的X.509格式的证书为例,使用-text即可看到证书的详细信息,结合上述X.509所需要包含的内容,可以进一步加深对于证书格式的理解,执行结果示例如下所示:

[root@liumiaocn certificate]# openssl x509 -in cert-test.crt -noout -text
Certificate:Data:Version: 3 (0x2)Serial Number:54:e1:48:6e:70:1d:78:32:af:c2:19:0f:3d:12:96:69:13:38:86:a1Signature Algorithm: sha256WithRSAEncryptionIssuer: C = CN, ST = LiaoNing, L = DaLian, O = devops, OU = unicorn, CN = devops.com, emailAddress = liumiaocn@outlook.comValidityNot Before: Dec  9 21:40:14 2019 GMTNot After : Dec  6 21:40:14 2029 GMTSubject: C = CN, ST = LiaoNing, L = DaLian, O = devops, OU = unicorn, CN = devops.com, emailAddress = liumiaocn@outlook.comSubject Public Key Info:Public Key Algorithm: rsaEncryptionRSA Public-Key: (2048 bit)Modulus:00:c7:bf:f1:a5:e3:47:86:b8:af:f7:47:ad:ca:1e:44:6a:1b:a7:ca:0c:96:47:3e:fd:61:66:c9:95:bc:7a:2a:ff:f5:37:aa:fe:bd:c2:d3:0c:6a:d6:7d:f6:92:b0:9f:a2:a2:ea:bd:72:e6:6f:cf:ce:cd:36:f2:52:85:81:89:c0:63:c3:35:7b:ff:62:31:8a:31:cf:fa:a4:09:05:d8:99:45:ef:64:a4:99:b4:4b:1c:3d:b6:f4:dd:69:83:f4:8c:aa:ac:1b:9d:57:2f:32:00:91:e3:e5:c0:de:62:4a:e0:e5:8f:a5:54:95:76:d7:82:bd:a0:a8:20:e6:a4:37:cd:6c:6e:01:c8:13:00:a5:5f:41:8f:cc:dd:bd:2f:e8:39:11:10:04:73:84:e3:dd:29:32:a3:46:97:4e:6f:7b:38:6c:aa:ab:58:62:3f:bc:6a:47:6b:aa:01:d7:6b:3f:81:fe:23:da:67:3e:8f:f8:c8:38:70:bb:af:45:28:6c:1a:f5:ad:e3:d1:f6:84:aa:d3:02:15:f0:ca:3e:76:aa:be:54:c9:1c:1c:28:97:50:67:64:e5:49:bc:05:85:5e:7d:4e:83:ac:f0:05:90:e5:d5:6f:25:14:e2:b8:95:96:e2:e0:8d:97:2d:26:f3:41:f3:54:7a:1a:07:38:af:0e:11Exponent: 65537 (0x10001)X509v3 extensions:X509v3 Subject Key Identifier: 86:46:7D:66:38:F5:BD:DB:5F:C0:E6:9F:54:38:3C:4D:34:85:D9:33X509v3 Authority Key Identifier: keyid:86:46:7D:66:38:F5:BD:DB:5F:C0:E6:9F:54:38:3C:4D:34:85:D9:33X509v3 Basic Constraints: criticalCA:TRUESignature Algorithm: sha256WithRSAEncryptionb9:2e:92:7d:66:08:07:3e:f6:c3:b2:4a:d0:27:5d:37:2a:09:bd:3b:3f:0f:a0:38:1a:c7:75:d7:ba:39:89:9e:08:67:6a:d6:f7:72:ad:0c:3b:c1:73:19:d8:6f:5c:bb:22:23:2a:11:d7:21:fd:c7:8e:98:a4:31:0a:f7:ca:14:d1:81:b9:6d:3a:4e:ad:f3:59:c0:bc:46:8c:61:cd:d6:ce:9b:a5:8a:43:db:7c:cb:89:a7:f5:c4:bb:86:93:0d:ad:c1:28:e4:ee:26:45:e8:8e:1f:78:67:0a:91:fa:ef:c5:14:b7:7c:85:db:6d:1b:23:55:ef:91:6b:47:31:ed:e2:dd:07:a9:2f:e3:5f:95:13:61:90:52:1a:7c:e6:09:ee:ab:46:44:07:fc:1e:2d:cf:92:39:af:c6:c1:4a:7a:f9:34:df:ff:a9:47:9f:76:71:27:6d:e3:72:66:2c:5b:2c:8e:dd:de:55:3d:eb:68:cf:11:7a:13:3d:6d:12:b2:7c:f4:79:18:9c:20:d7:a2:72:cc:fe:c5:0e:74:bd:7c:41:36:03:26:5c:12:9f:e4:a8:87:16:1f:1b:67:45:34:7d:4a:05:83:7b:a8:56:8b:5a:dc:42:d7:92:39:19:50:d0:56:08:e9:18:02:38:82:22:f0:84:c3:bc:a5:84:56
[root@liumiaocn certificate]#

从中几乎可以看到上述描述的所有内容,也可使用具体的选项确认一种的一项,比如证书的颁发者可以通过-issuer来确认

[root@liumiaocn certificate]# openssl x509 -in cert-test.crt -noout -issuer
issuer=C = CN, ST = LiaoNing, L = DaLian, O = devops, OU = unicorn, CN = devops.com, emailAddress = liumiaocn@outlook.com
[root@liumiaocn certificate]#

详细的证书信息的查询相关的常用选项和命令使用方式,可参看:

  • https://liumiaocn.blog.csdn.net/article/details/103483123

参考内容

https://en.wikipedia.org/wiki/X.509
https://zh.wikipedia.org/wiki/X.509
https://zh.wikipedia.org/wiki/ASN.1

SSL基础:13:X.509证书格式介绍相关推荐

  1. 证书格式介绍及如何将.pem转换为.crt和.key?

    证书格式介绍 PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发 ...

  2. linux cer证书转为jks,常见SSL证书格式介绍以及SSL证书格式转化方法

    我们大部分站长使用的SSL证书一般都是.CRT..KEY 这样子的文件,没错这个都是我们常用的Linux服务器Nginx环境的证书文件.不管我们是购买的付费SSL证书,还是使用的免费SSL证书看到的证 ...

  3. X.509证书的介绍

    目录 1.X.509简介 2.证书组成结构 3.证书文件扩展名 4.生成一个自签名证书的示例 5.生成签名请求及CA 签名 1.X.509简介 X.509是密码学里公钥证书的格式标准.X.509证书已 ...

  4. linux.命令格式,【Linux基础知识】Linux命令格式介绍

    Linux系统中每一命令都提供特定的系统功能,尽管命令繁多,但是在命令的使用形式上存在一定的共性,概况起来,Linux命令具有下面的通用格式: 命令字 [选项] [参数] ("[ ]&quo ...

  5. 什么是X.509证书?X.509证书工作原理及应用?

    X.509是公钥基础设施(PKI)的标准格式.X.509证书就是基于国际电信联盟(ITU)制定的X.509标准的数字证书.X.509证书主要用于识别互联网通信和计算机网络中的身份,保护数据传输安全.X ...

  6. X.509证书(结构+原理)

    一.什么是数字证书和数字签名 数字证书:数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供了一种在Internet上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证.它是由 ...

  7. 【Grasshopper基础13】创建可在画布上自由传递的自定义类型数据(上)—— IGH_Goo接口的重要性及其实现

    接下来的两章,我们来介绍一下在之前章节尚未介绍到的,但却在Grasshopper中占据极其重要地位的另一批我们早就虎视眈眈但却还没想到理由要去触碰的电池们(左侧红色框指示): 是的,就是这一些带黑底的 ...

  8. 【ssl认证、证书】SSL 证书基本概念、证书格式、openssl和keytool的区别

    文章目录 1. keytool VS openssl 2. X.509 VS PKCS 2.1 PKCS 2.2 X.509 2.2.1 证书编码格式 2.2.1.1 DER 证书编码格式二进制 2. ...

  9. 安卓SSL证书格式:pfx转换BKS格式证书

    申请SSL证书 实际上在Android中是无法使用pfx格式证书,Android 系统中使用的证书要求是bks格式.要转换bks证书格式,首先要搭建转换证书的环境. 一.jdk默认情况下是不支持BKS ...

  10. SSL证书格式转化的两种方法

    由于不同服务器类型支持的SSL证书格式不同,所以当你获得CA签发的SSL证书时,需要转化成所需证书文件格式,常见的SSL证书格式转化方法分享于此. 在转化之前,需要确认服务器支持哪种证书格式,上一篇常 ...

最新文章

  1. IOS面试_1.浅析内存管理
  2. 遗传算法的收敛性分析
  3. 【C++】39. std::ofstream把程序中的中的变量值存储到文件中
  4. handler机制的原理
  5. H.264边缘块进行帧内预测时,上边缘和左边缘块的预测情况。
  6. python day08
  7. Acwing 1084. 数字游戏 II
  8. 教师计算机提升学到的知识,教师计算机教学工作总结(精选6篇)
  9. Spring Web Services 3.0.4.RELEASE和2.4.3.RELEASE发布
  10. Redis 面试一定要知道的 3 个 问题!
  11. dns修复工具一键修复_ps污点修复画笔工具怎么用?修复工具组(一)
  12. 使用adb指令往机顶盒上安装应用
  13. Java随机密码生成器
  14. js获取某一天是星期几
  15. Flash和JS实现的图片幻灯片切换特效
  16. UDP视频流MP2T的分析方法
  17. LoRaEdge LR1120 卫星直连通信解读
  18. 互联网晚报 | 1月24日 星期一 | 快手与11家省市春晚达成合作;京东首个数字人客服芊言上岗;拉菲虎年限定红酒上线虹宇宙...
  19. 玩转python网络爬虫 黄永祥_玩转Python网络爬虫
  20. 简单的c#winform画图工具

热门文章

  1. Vue3.0调用PC端本地摄像头录像
  2. 使用搜狗输入法的U模式打出不会读的字
  3. 【Unity实战100例】Unity制作脑图编辑工具(全网第一首发)
  4. Android直接回复通知
  5. xgene:之ROC曲线、ctDNA、small-RNA seq、甲基化seq、单细胞DNA, mRNA
  6. 一文详述 Python 中的 property 语法
  7. HDU - 6070
  8. bzoj 2959: 长跑
  9. matlab ascii显示,matlab ASCII 格式导入
  10. python空字典怎么定义_python dict怎么定义