在前面的文章中,我们生成了一个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.509X.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