X509数字证书学习

1 背景

之前接触过RSA、SHA、MD5等加密/摘要算法,但是对X509证书缺乏整体认知,这里预期通过学习X509概念和应用,做一个整理的理解。

目标:

  1. X509是什么、格式
  2. X509的历史和版本、以及发布机构
  3. X509应用场景、自建X509证书(openssl)
  4. X509、RSA、SHA等之间的关系

未完成的问题:

  1. 浏览器证书都是X509格式的吗?有没有其他格式的?
  2. 内置的根证书列表是如何验证CA的?

2 介绍

X509概念:百度百科

  • X.509 是密码学里公钥证书的格式标准。
  • X.509证书里含有公钥身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构CA的签名,也可以是自签名)
  • 事实上X.509认证指的是RFC5280里定义的X.509 v3,包括对IETF的PKIX证书和证书吊销列表,通常也称为公钥基础设施。(2008年)
  • X.509 证书己应用在包括TLS/SSL(WWW万维网安全浏览的基石)在内的众多 Internet协议里.同时它也用在很多非在线应用场景里,比如电子签名服务。
  • TLS介绍
  • RFC5280定义
  • 应用场景:HTTPS、MQTTS

3 X509证书

3.1 证书组成结构

证书组成结构标准用ASN.1(一种标准的语言)来进行描述. X.509 v3数字证书结构如下:

  • 版本号
  • 序列号
  • 签名算法
  • 签名哈希算法
  • 颁发者
  • 此日期前无效
  • 此日期后无效
  • 使用者
  • 公钥:算法+内容
  • 公钥参数

3.2 证书编码格式和扩展名

原文+证书格式互转
https://blog.csdn.net/new9232/article/details/123161885

X509证书及其格式扩展名
https://www.cnblogs.com/real-bert/p/15257838.html

3.2.1 编码格式

pem编码
文本格式,内容是base64编码。可以直接打开查看。

证书文件

以-----BEGIN CERTIFICATE-----开头


以-----END CERTIFICATE-----结尾

证书请求文件

以-----BEGIN CERTIFICATE REQUEST-----开头


以-----END CERTIFICATE REQUEST-----结尾

der编码
二进制格式

3.2.2 扩展名

  • pem:采用pem编码的数字证书。
  • der:采用der编码的数字证书。
  • crt:可能是pem编码,也可能是der编码。但大多数情况下为pem编码的数字证书。
  • cer:可能是pem编码,也可能是der编码。但大多数情况下为der编码的数字证书。
  • key:用来存放公钥或私钥。
  • csr:证书请求文件。
  • pfx:PKCS #12,是公钥加密标准(Public Key Cryptography Standards)系列的一种。简单理解就是将私钥和数字证书打包在一起了。

4 浏览器证书导出(示例)

以IE/360极速浏览器为例,选择工具 – Internet选项 – 这里选择受信任的根证书颁发机构 – 这里选择第第一个:

4.1 查看证书详细信息

双击 – 选择详细信息

在这里插入图片描述请添加图片描述

4.2 导出证书

导出证书,这里分别导出DER编码和Base64编码格式的证书,导出文件分别命名,后缀均是.cer格式。
在这里插入图片描述

Base64格式的证书内容如下:

-----BEGIN CERTIFICATE-----
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
-----END CERTIFICATE-----

DER格式的证书,通过文本工具打开是乱码,这里通过UE等工具16进制打开:

UltraEdit只复制16进制:https://jingyan.baidu.com/article/4ae03de31a95893eff9e6b31.html

00000000h: 30 82 04 32 30 82 03 1A A0 03 02 01 02 02 01 01 ; 0?20?.?......
00000010h: 30 0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 30 ; 0...*咹嗺......0
00000020h: 7B 31 0B 30 09 06 03 55 04 06 13 02 47 42 31 1B ; {1.0...U....GB1.
00000030h: 30 19 06 03 55 04 08 0C 12 47 72 65 61 74 65 72 ; 0...U....Greater
00000040h: 20 4D 61 6E 63 68 65 73 74 65 72 31 10 30 0E 06 ;  Manchester1.0..
00000050h: 03 55 04 07 0C 07 53 61 6C 66 6F 72 64 31 1A 30 ; .U....Salford1.0
00000060h: 18 06 03 55 04 0A 0C 11 43 6F 6D 6F 64 6F 20 43 ; ...U....Comodo C
00000070h: 41 20 4C 69 6D 69 74 65 64 31 21 30 1F 06 03 55 ; A Limited1!0...U
00000080h: 04 03 0C 18 41 41 41 20 43 65 72 74 69 66 69 63 ; ....AAA Certific
00000090h: 61 74 65 20 53 65 72 76 69 63 65 73 30 1E 17 0D ; ate Services0...
000000a0h: 30 34 30 31 30 31 30 30 30 30 30 30 5A 17 0D 32 ; 040101000000Z..2
000000b0h: 38 31 32 33 31 32 33 35 39 35 39 5A 30 7B 31 0B ; 81231235959Z0{1.
000000c0h: 30 09 06 03 55 04 06 13 02 47 42 31 1B 30 19 06 ; 0...U....GB1.0..
000000d0h: 03 55 04 08 0C 12 47 72 65 61 74 65 72 20 4D 61 ; .U....Greater Ma
000000e0h: 6E 63 68 65 73 74 65 72 31 10 30 0E 06 03 55 04 ; nchester1.0...U.
000000f0h: 07 0C 07 53 61 6C 66 6F 72 64 31 1A 30 18 06 03 ; ...Salford1.0...
00000100h: 55 04 0A 0C 11 43 6F 6D 6F 64 6F 20 43 41 20 4C ; U....Comodo CA L
00000110h: 69 6D 69 74 65 64 31 21 30 1F 06 03 55 04 03 0C ; imited1!0...U...
00000120h: 18 41 41 41 20 43 65 72 74 69 66 69 63 61 74 65 ; .AAA Certificate
00000130h: 20 53 65 72 76 69 63 65 73 30 82 01 22 30 0D 06 ;  Services0?"0..
00000140h: 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 82 01 0F ; .*咹嗺.......?.
00000150h: 00 30 82 01 0A 02 82 01 01 00 BE 40 9D F4 6E E1 ; .0?..?..継濘n?
00000160h: EA 76 87 1C 4D 45 44 8E BE 46 C8 83 06 9D C1 2A ; 陃?MED幘F葍.澚*
00000170h: FE 18 1F 8E E4 02 FA F3 AB 5D 50 8A 16 31 0B 9A ; ?.庝.玗P?1.?
00000180h: 06 D0 C5 70 22 CD 49 2D 54 63 CC B6 6E 68 46 0B ; .信p"虸-Tc潭nhF.
00000190h: 53 EA CB 4C 24 C0 BC 72 4E EA F1 15 AE F4 54 9A ; S晁L$兰rN犟.T?
000001a0h: 12 0A C3 7A B2 33 60 E2 DA 89 55 F3 22 58 F3 DE ; ..脄?`廒塙?X筠
000001b0h: DC CF EF 83 86 A2 8C 94 4F 9F 68 F2 98 90 46 84 ; 芟飪啟寯O焗驑怓?
000001c0h: 27 C7 76 BF E3 CC 35 2C 8B 5E 07 64 65 82 C0 48 ; '莢裤?,媈.de偫H
000001d0h: B0 A8 91 F9 61 9F 76 20 50 A8 91 C7 66 B5 EB 78 ; 皑戼a焩 P☉莊惦x
000001e0h: 62 03 56 F0 8A 1A 13 EA 31 A3 1E A0 99 FD 38 F6 ; b.V饖..??牂??
000001f0h: F6 27 32 58 6F 07 F5 6B B8 FB 14 2B AF B7 AA CC ; ?2Xo.鮧耕.+
00000200h: D6 63 5F 73 8C DA 05 99 A8 38 A8 CB 17 78 36 51 ; 謈_s屭.櫒8ㄋ.x6Q
00000210h: AC E9 9E F4 78 3A 8D CF 0F D9 42 E2 98 0C AB 2F ; 烎x:嵪.貰鈽.?
00000220h: 9F 0E 01 DE EF 9F 99 49 F1 2D DF AC 74 4D 1B 98 ; ?.揎煓I?攥tM.?
00000230h: B5 47 C5 E5 29 D1 F9 90 18 C7 62 9C BE 83 C7 26 ; 礕佩)样?莃溇兦&
00000240h: 7B 3E 8A 25 C7 C0 DD 9D E6 35 68 10 20 9D 8F D8 ; {>?抢轁?h. 潖?
00000250h: DE D2 C3 84 9C 0D 5E E8 2F C9 02 03 01 00 01 A3 ; 抟脛?^??....?
00000260h: 81 C0 30 81 BD 30 1D 06 03 55 1D 0E 04 16 04 14 ; 伬0伣0...U......
00000270h: A0 11 0A 23 3E 96 F1 07 EC E2 AF 29 EF 82 A5 7F ; ?.#>栺.焘?飩?
00000280h: D0 30 A4 B4 30 0E 06 03 55 1D 0F 01 01 FF 04 04 ; ?ご0...U......
00000290h: 03 02 01 06 30 0F 06 03 55 1D 13 01 01 FF 04 05 ; ....0...U......
000002a0h: 30 03 01 01 FF 30 7B 06 03 55 1D 1F 04 74 30 72 ; 0...0{..U...t0r
000002b0h: 30 38 A0 36 A0 34 86 32 68 74 74 70 3A 2F 2F 63 ; 08???http://c
000002c0h: 72 6C 2E 63 6F 6D 6F 64 6F 63 61 2E 63 6F 6D 2F ; rl.comodoca.com/
000002d0h: 41 41 41 43 65 72 74 69 66 69 63 61 74 65 53 65 ; AAACertificateSe
000002e0h: 72 76 69 63 65 73 2E 63 72 6C 30 36 A0 34 A0 32 ; rvices.crl06??
000002f0h: 86 30 68 74 74 70 3A 2F 2F 63 72 6C 2E 63 6F 6D ; ?http://crl.com
00000300h: 6F 64 6F 2E 6E 65 74 2F 41 41 41 43 65 72 74 69 ; odo.net/AAACerti
00000310h: 66 69 63 61 74 65 53 65 72 76 69 63 65 73 2E 63 ; ficateServices.c
00000320h: 72 6C 30 0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 ; rl0...*咹嗺.....
00000330h: 00 03 82 01 01 00 08 56 FC 02 F0 9B E8 FF A4 FA ; ..?...V?饹?
00000340h: D6 7B C6 44 80 CE 4F C4 C5 F6 00 58 CC A6 B6 BC ; 謠艱€蜲呐?X苔都
00000350h: 14 49 68 04 76 E8 E6 EE 5D EC 02 0F 60 D6 8D 50 ; .Ih.v桄頬?.`謲P
00000360h: 18 4F 26 4E 01 E3 E6 B0 A5 EE BF BC 74 54 41 BF ; .O&N.沔哎羁紅TA?
00000370h: FD FC 12 B8 C7 4F 5A F4 89 60 05 7F 60 B7 05 4A ; .盖OZ魤`.`?J
00000380h: F3 F6 F1 C2 BF C4 B9 74 86 B6 2D 7D 6B CC D2 F3 ; 篥衤磕箃喍-}k桃?
00000390h: 46 DD 2F C6 E0 6A C3 C3 34 03 2C 7D 96 DD 5A C2 ; F?凄j妹4.,}栞Z?
000003a0h: 0E A7 0A 99 C1 05 8B AB 0C 2F F3 5C 3A CF 6C 37 ; .?櫫.嫬./骪:蟣7
000003b0h: 55 09 87 DE 53 40 6C 58 EF FC B6 AB 65 6E 04 F6 ; U.囖S@lX稂东en.?
000003c0h: 1B DC 3C E0 5A 15 C6 9E D9 F1 59 48 30 21 65 03 ; .?郱.茷亳YH0!e.
000003d0h: 6C EC E9 21 73 EC 9B 03 A1 E0 37 AD A0 15 18 8F ; l扉!s鞗.∴7瓲..?
000003e0h: FA BA 02 CE A7 2C A9 10 13 2C D4 E5 08 26 AB 22 ; .围,?.,藻.&?
000003f0h: 97 60 F8 90 5E 74 D4 A2 9A 53 BD F2 A9 68 E0 A2 ; 梎鴲^t寓歋津﹉啖
00000400h: 6E C2 D7 6C B1 A3 0F 9E BF EB 68 E7 56 F2 AE F2 ; n伦l保.灴雋鏥虍?
00000410h: E3 2B 38 3A 09 81 B5 6B 85 D7 BE 2D ED 3F 1A B7 ; ?8:.伒k呑??.?
00000420h: B2 63 E2 F5 62 2C 82 D4 6A 00 41 50 F1 39 83 9F ; 瞔怩b,傇j.AP?儫
00000430h: 95 E9 36 96 98 6E                               ; 曢6枠n

注意:

  1. DER编码格式只有纯内容,没有-----BEGIN CERTIFICATE-----
  2. 上面base64编码的部分,通过base64解码后的16进制和上面结果一致。

5 参考资料

X509证书详解
https://blog.csdn.net/weixin_38451161/article/details/108180919

X.509数字证书的结构与解析
https://zuopeng.blog.csdn.net/article/details/52145009

通过OpenSSL解码X509证书文件
https://blog.csdn.net/yyfzy/article/details/46682207
https://blog.csdn.net/yyfzy/article/details/46798965

身份认证之PKI搭建、X.509(RFC5280)——(一)
https://blog.csdn.net/weixin_43255133/article/details/84025214

六、openssl 和 证书

在使用OpenSSL查看证书时,可以通过特定的命令来确定证书是采用PKCS#1格式还是PKCS#8格式。以下是一些步骤和命令,帮助你识别证书的格式:

  1. 查看证书信息
    使用以下命令可以查看证书的详细信息,包括它的格式:

    openssl x509 -in certificate.pem -text -noout
    

    这里certificate.pem是你的证书文件。这个命令会输出证书的所有文本信息,包括它的公钥部分。

  2. 检查公钥部分
    在输出的信息中,你需要查看公钥部分。如果是PKCS#1格式的证书,你会看到类似Subject Public Key Info的部分,其中包含了公钥的算法和公钥本身。

  3. 检查私钥格式
    如果你有私钥文件,可以使用以下命令来检查它是PKCS#1还是PKCS#8格式:

    openssl pkcs8 -inform PEM -in private_key.pem -topk8 -nocrypt
    

    这里private_key.pem是你的私钥文件。如果私钥是PKCS#1格式的,这个命令会尝试将其转换为PKCS#8格式,并且不会提示输入密码(因为-nocrypt选项指定了不加密)。如果转换成功,那么原始私钥很可能是PKCS#1格式的。

  4. 转换私钥格式
    如果你需要将PKCS#1格式的私钥转换为PKCS#8格式,可以使用以下命令:

    openssl rsa -in rsa_private_key.pem -out pkcs8_private_key.pem
    

    这将创建一个新的PKCS#8格式的私钥文件pkcs8_private_key.pem

  5. 检查证书链
    如果你有一个证书链,你可以使用以下命令来检查每个证书的格式:

    openssl x509 -in intermediate.pem -text -noout
    

    对于证书链中的每个证书,重复上述步骤。

通过上述步骤,你应该能够确定你的证书是PKCS#1格式还是PKCS#8格式。需要注意的是,PKCS#1和PKCS#8是两种不同的私钥格式,而证书(公钥证书)通常不涉及这两种格式的区别,因为它们是公钥的表现形式。

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SM2是一种国密算法,用于椭圆曲线加密和数字签名。x509数字证书是一种常见的公钥证书格式,用于证明数字证书的合法性和身份认证。在Python中,可以使用第三方库pycryptodome来实现SM2算法和x509数字证书的生成。 下面是一个使用pycryptodome库生成SM2密钥对和x509数字证书的示例代码: ```python from Crypto.PublicKey import ECC from Crypto.Util.asn1 import DerSequence, DerOctetString, DerBitString, DerObjectId from Crypto.Util.number import long_to_bytes from Crypto.Signature import DSS from Crypto.Hash import SHA256 from datetime import datetime, timedelta import base64 # 生成SM2密钥对 key = ECC.generate(curve='sm2') private_key = key.export_key(format='DER') public_key = key.public_key().export_key(format='DER') # 生成x509数字证书 version = 2 # x509版本号,2表示v3 serial_number = 1 # 证书序列号 signature_algorithm = DerSequence([DerObjectId('1.2.156.10197.1.501')]) # 签名算法,SM2的OID为1.2.156.10197.1.501 issuer = DerSequence([DerObjectId('2.5.4.6'), DerOctetString('CN=CA')]) # 颁发者信息,这里假设颁发者为CN=CA validity_not_before = datetime.utcnow() # 证书有效期开始时间 validity_not_after = validity_not_before + timedelta(days=365) # 证书有效期结束时间,这里假设为一年 subject = DerSequence([DerObjectId('2.5.4.6'), DerOctetString('CN=Test')]) # 证书主题信息,这里假设证书主题为CN=Test subject_public_key_info = DerSequence([DerObjectId('1.2.840.10045.2.1'), DerObjectId('1.2.156.10197.1.301'), DerBitString(public_key)]) # 证书主题公钥信息,第一个OID表示ECC公钥,第二个OID表示SM2算法,第三个参数为公钥的DER编码 extensions = None # 扩展信息,这里不设置扩展信息 tbs_certificate = DerSequence([version, serial_number, signature_algorithm, issuer, validity_not_before, validity_not_after, subject, subject_public_key_info, extensions]) # 待签名的证书信息 hash_obj = SHA256.new(tbs_certificate.dump()) # 计算待签名证书信息的哈希值 signer = DSS.new(key, 'fips-186-3') # 使用SM2私钥创建签名器 signature = signer.sign(hash_obj) # 对待签名证书信息的哈希值进行签名 certificate = DerSequence([tbs_certificate, signature_algorithm, DerBitString(signature)]) # 构造完整的x509数字证书 certificate_der = certificate.dump() # 将数字证书编码为DER格式 certificate_base64 = base64.b64encode(certificate_der).decode() # 将DER格式的数字证书进行Base64编码 print('SM2私钥:', base64.b64encode(private_key).decode()) print('SM2公钥:', base64.b64encode(public_key).decode()) print('x509数字证书:', certificate_base64) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值