X.509证书结构
X.509标准定义了证书中应该包含哪些信息,并描述了这些信息是如何编码的(即数据格式),所有的X.509证书包含以下数据:
(1)、X.509版本号:指出该证书使用了哪种版本的X.509标准,版本号会影响证书中的一些特定信息。 目前的版本是3。
(2)、证书持有人的公钥:包括证书持有人的公钥、算法(指明密钥属于哪种密码系统)的标识符和其 他相关的密钥参数。
(3)、证书的序列号:由CA给予每一个证书分配的唯一的数字型编号。
当证书被取消时,实际上是将此证书序列号放入由CA签发的CRL (Certificate Revocation List证书作废表,或证书黑名单表)中。这也是序列号唯一的原因。
(4)、主题信息:证书持有人唯一的标识符(或称DN-distinguished name)这个名字在Internet上应 该是唯一的。DN由许多部分组成,例如这样:
CN = Bob Allen,
OU = Total Network Security Division
O = Network Associates, Inc.
C = US
这些信息指出该科目的通用名、组织单位、组织和国家或者证书持有人的姓名、服 务处所等信息。
(5)、证书的有效期:证书起始日期和时间以及终止日期和时间;指明证书在这两个时间内有效。
(6)、认证机构:证书发布者,是签发该证书的实体唯一的CA的X.500名字。
使用该证书意味着信任签发证书的实体。
(7)、发布者的数字签名: 这是使用发布者私钥生成的签名,以确保这个证书在发放之后没有被撰改 过。
(8)、签名算法标识符:用来指定CA签署证书时所使用的签名算法。算法标识符用来指定CA签发证 书时所使用的公开密钥算法和HASH算法。
H--Hash计算
E--加密计算
D--解密计算
在签发者处,首先求出传递消息Info的HASH值,然后用私钥Private Key 对Hash值做加密,然后将传递消息原文Info和经过加密的HASH值一起发给接 受者,接受者首先用签发者的公钥揭开密码,然后对收到的Info原文计算HASH 值,然后比对是否相对,如果相同,则认证成功。
证书实例
RSA证书,非CA证书 (来源于wiki)
$ openssl x509 -in freesoft-certificate.pem -noout -text
Certificate:
Data:
Version: 1 (0x0) // 该证书版本号是 1
Serial Number: 7829 (0x1e95) // 序列号
Signature Algorithm: md5WithRSAEncryption //该证书使用RSA和MD5算法签名
//证书发行者信息
Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc,
OU=Certification Services Division,
CN=Thawte Server //证书发行者名字
CA/[email protected] // CA的联系方式
Validity // 有效期 1998/7/9 - 1999/7/9
Not Before: Jul 9 16:04:02 1998 GMT
Not After : Jul 9 16:04:02 1999 GMT
//证书主体信息
Subject: C=US, ST=Maryland, L=Pasadena, O=Brent Baccala,
OU=FreeSoft, //证书主体名字CN=www.freesoft.org/[email protected] // 证书主体的联系方式
Subject Public Key Info:
Public Key Algorithm: rsaEncryption //公钥使用RSA算法
RSA Public Key: (1024 bit) // 1024位的RSA公钥
Modulus (1024 bit):
00:b4:31:98:0a:c4:bc:62:c1:88:aa:dc:b0:c8:bb:
33:35:19:d5:0c:64:b9:3d:41:b2:96:fc:f3:31:e1:
66:36:d0:8e:56:12:44:ba:75:eb:e8:1c:9c:5b:66:
70:33:52:14:c9:ec:4f:91:51:70:39:de:53:85:17:
16:94:6e:ee:f4:d5:6f:d5:ca:b3:47:5e:1b:0c:7b:
c5:cc:2b:6b:c1:90:c3:16:31:0d:bf:7a:c7:47:77:
8f:a0:21:c7:4c:d0:16:65:00:c1:0f:d7:b8:80:e3:
d2:75:6b:c1:ea:9e:5c:5c:ea:7d:c1:a1:10:bc:b8:
e8:35:1c:9e:27:52:7e:41:8f
Exponent: 65537 (0x10001)
Signature Algorithm: md5WithRSAEncryption //用RSA算法加密MD5散列,完成签名
93:5f:8f:5f:c5:af:bf:0a:ab:a5:6d:fb:24:5f:b6:59:5d:9d:
92:2e:4a:1b:8b:ac:7d:99:17:5d:cd:19:f6:ad:ef:63:2f:92:
ab:2f:4b:cf:0a:13:90:ee:2c:0e:43:03:be:f6:ea:8e:9c:67:
d0:a2:40:03:f7:ef:6a:15:09:79:a9:46:ed:b7:16:1b:41:72:
0d:19:aa:ad:dd:9a:df:ab:97:50:65:f5:5e:85:a6:ef:19:d1:
5a:de:9d:ea:63:cd:cb:cc:6d:5d:01:85:b5:6d:c8:f3:d9:f7:
8f:0e:fc:ba:1f:34:e9:96:6e:6c:cf:f2:ef:9b:bf:de:b5:22:
68:9f