SSL基础:13:X.509证书格式介绍

在这里插入图片描述
在前面的文章中,我们生成了一个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:a1
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = CN, ST = LiaoNing, L = DaLian, O = devops, OU = unicorn, CN = devops.com, emailAddress = liumiaocn@outlook.com
        Validity
            Not Before: Dec  9 21:40:14 2019 GMT
            Not After : Dec  6 21:40:14 2029 GMT
        Subject: C = CN, ST = LiaoNing, L = DaLian, O = devops, OU = unicorn, CN = devops.com, emailAddress = liumiaocn@outlook.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA 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:11
                Exponent: 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:33
            X509v3 Authority Key Identifier: 
                keyid:86:46:7D:66:38:F5:BD:DB:5F:C0:E6:9F:54:38:3C:4D:34:85:D9:33

            X509v3 Basic Constraints: critical
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
         b9: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

淼叔 CSDN认证博客专家 神经网络 TensorFlow NLP
资深架构师,PMP、OCP、CSM、HPE University讲师,EXIN DevOps Professional与DevOps Master认证讲师,曾担任HPE GD China DevOps & Agile Leader,帮助企业级客户提供DevOps咨询培训以及实施指导。熟悉通信和金融领域,有超过十年金融外汇行业的架构设计、开发、维护经验,在十几年的IT从业生涯中拥有了软件开发设计领域接近全生命周期的经验和知识积累,著有企业级DevOps技术与工具实战。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页