X.509被广泛使用的数字证书标准,是由国际电联电信委员会(ITU-T)为单点登录(SSO-Single Sing-on)和授权管理基础设施(PMI-Privilege Management Infrastructure)制定的PKI标准。X.509定义了(但不仅限于)公钥证书、证书吊销清单、属性证书和证书路径验证算法等证书标准。
X.509最初是在1988年的7月3日发布的,版本是X.509 v1,当时是作为ITU X.500目录服务标准的一部分。它设定了一系列严格的CA分级体系来颁发数字证书。和其他网络信任模型(譬如PGP)对比,任何人,不仅仅是特定的CA,可以签发并验证其他密钥证书的有效性。
X.509 2 版引入了主体和签发人唯一标识符的概念,以解决主体和/或签发人名称在一段时间后可能重复使用的问题。大多数证书监视文档都极力建议不要重复使用主体或签发人名称,而且建议证书不要使用唯一标识符。版本 2 证书尚未得到广泛使用。
X.509 3 版是最新的版本(1996 年)。它支持扩展的概念,因此任何人均可定义扩展并将其纳入证书中。现在常用的扩展包括:KeyUsage(仅限密钥用于特殊目的,例如“只签”)和 AlternativeNames(允许其它标识与该公钥关联,例如 DNS 名、电子邮件地址、IP 地址)。扩展可标记为“极重要”,以表示应选中该扩展并强制执行或使用。例如,如果某一证书将 KeyUsage 扩展标记为“极重要”,而且设置为“keyCertSign”,则在 SSL 通信期间该证书出现时将被拒绝,因为该证书扩展表示相关私钥应只用于签写证书,而不应该用于 SSL。
在X.509系统中,CA签发的证书依照X.500的管理,绑定了一个唯一甄别名(DN-Distinguished Name ),可以包含多个字段和值,还可以支持别名(Alternative Name )。
一个组织受信任的根证书会分发给所有需要用到的PKI系统的员工手上。主流浏览器:IE、Netscape/Mozilla,Opera和Safari会预先安装一部分根证书,这些根证书都是受信任的证书认证机构CA,这样他们颁发的证书,浏览器将可以直接信任。虽然用户可以删除或者禁用这些根证书,但事实上,用户很少这么做。在最新的微软平台,甚至会在用户移除了预先安置的根证书后,当用户再访问这些被删除的根证书网站的时候,会自动将这些根证书恢复到信任列表中。
X.509包含了一个证书吊销列表(CRL-Certificate Revocation List)实施的标准,这在PKI系统中经常被人所忽略。IETF提出的检查证书有效性的方法是在线证书状态(OCSP- Online Certificate Status Protocol)。Firefo3 缺省就是使用OCSP协议。
X.509 v3证书数据结构如下:
- Certificate证书
- Version 版本
- Serial Number 序列号
- Algorithm ID 算法标识
- Issuer 颁发者
- Validity 有效期
- Not Before 有效起始日期
- Not After 有效终止日期
- Subject 使用者
- Subject Public Key Info 使用者公钥信息
- Public Key Algorithm 公钥算法
- Subject Public Key 公钥
- Issuer Unique Identifier (Optional) 颁发者唯一标识
- Subject Unique Identifier (Optional) 使用者唯一标识
- Extensions (Optional) 扩展
- Certificate Signature Algorithm 证书签名算法
- Certificate Signature 证书签名
- h--Hash计算
- E--加密计算
- D--解密计算
在签发者处,首先求出传递消息Info的HASH值,然后用私钥Private Key对Hash值做加密,然后将传递消息原文Info和经过加密的HASH值一起发给接受者,接受者首先用签发者的公钥揭开密码,然后对收到的Info原文计算HASH值,然后比对是否相对,如果相同,则认证成功。
- .cer, .crt - 通常被用于二进制的DER文件格式 (同于.der), 不过也被用于Base64编码的文件 (例如 .pem).
- .P7C - PKCS#7证书格式,仅仅包含证书和CRL列表信息,没有私钥。
- .P12 - PKCS#12文件, 包含证书(公钥)和私钥(受密码保护),已经完整的证书链信。
是一种将数据加密和签名(正式名称是“enveloping”)的技术标准。 它描述数字证书的语法和其他加密消息——尤其是,数据加密和数字签名的方法,也包含了算法。但PKCS#7不包含私钥信息。
定义了一个用于保存私钥和对应公钥证书的文件格式,并由对称密钥加密保护。PKCS#12通常采用PFX,P12作为文件扩展名。
PKCS#12文件可以存放多个证书,并由密码保护,通常用于WINDOWS IIS,也能够被当作Java Keysotre文件使用,用于Tomcat,Resign,Weblogic,Jboss等,不能被用于Apache.
以下是一个颁发给login.yahoo.com的X.509证书解码的案例,文件的实际大小大约是1KB字节。这个证书是由GeoTrust(现在已经被Verisign收购)签发。所以在签发者栏目中,可以看到“Equifax Secure Certificate Authority” (这家已经被Geotrust收购,目前Geotrust所有的证书都由这个根证书签发)。在使用者(Subject)中包含多条信息,不过最重要的是通用名(Common Name, CN),因为这个部分是用来和网站的域名相匹配的,同时也包含了RSA的公钥以及Geotrust的签名,目前所有的SSL证书都采用SHA1 HASH算法计算特征值。
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 368716 (0x5a04c)
Signature Algorithm: sha1WithRSAEncryption
Issuer:C=US,O=Equifax,
OU=Equifax Secure Certificate Authority
Validity
Not Before: Jan 4 17:09:06 2006 GMT
Not After : Jan 4 17:09:06 2011 GMT
Subject: C=US, ST=California, L=Santa Clara,
O=Yahoo! Inc., OU=Yahoo, CN=login.yahoo.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:b5:6c:4f:ee:ef:1b:04:5d:be:70:4a:d8:55:1d:
8a:77:0d:c1:45:00:f5:3b:1a:10:dd:d7:f7:bb:7a:
65:54:7f:60:d2:16:bb:bd:12:a5:78:78:d6:b3:50:
4e:ba:17:48:27:7a:22:6f:2a:7c:1d:a2:36:22:d8:
59:a2:ae:3a:0b:d4:d2:1b:8a:0e:5a:89:a9:e4:9a:
ff:db:3f:04:e2:9b:75:c1:8d:c5:8c:05:a1:f3:b5:
92:5e:a1:44:49:19:e4:90:b4:e9:ef:e4:5d:b2:20:
6d:f9:23:76:b8:b2:d4:af:a3:06:f5:9e:03:8f:b8:
82:05:21:11:25:44:3a:80:05
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Non Repudiation,
Key Encipherment,Data Encipherment
X509v3 Subject Key Identifier:
A0:1E:6E:0C:9B:6E:6A:EB:D2:AE:5A:4A:18:FF:0E:93:
46:1A:D6:32
X509v3 CRL Distribution Points:
URI:http://crl.geotrust.com/crls/secureca.crl
X509v3 Authority Key Identifier:
keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:
4F:33:98:90:9F:D4
X509v3 Extended Key Usage:
TLS Web Server Authentication,
TLS Web Client Authentication
Signature Algorithm: sha1WithRSAEncryption
50:25:65:10:43:e1:74:83:2f:8f:9c:9e:dc:74:64:4e:71:27:
4e:2a:6e:4a:12:7b:4c:41:2e:61:4a:11:0b:41:a6:b1:52:cb:
13:76:b6:45:e4:8d:d4:00:9a:3b:02:c7:82:29:01:a3:ee:7d:
f7:b9:02:88:9d:3e:c3:1c:e6:3d:d3:90:fc:9c:56:db:19:9d:
ab:a8:03:80:7d:c4:e2:c4:09:33:9e:58:5b:77:37:89:59:a3:
86:8e:a1:df:b3:bb:02:ed:21:62:fb:ba:c2:ba:e8:d4:8f:66:
c1:a5:5f:ad:f9:3f:cf:22:9b:17:57:a0:ca:28:c6:76:03:a4:
c4:e7
为了验证这个证书,需要用这个证书签发者的根证书(Geotrust的Equifax Secure Certificate Authority)。由于这个证书是用Geotrust的根证书的私钥来签名的,所以我们可以用Geotrust的公钥来对证书的SHA1哈希值进行解码,然后验证解码后的哈希值是否和证书的哈希值一致。以下是Geotrust根证书的样例:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 903804111 (0x35def4cf)
Signature Algorithm: sha1WithRSAEncryption
Issuer:C=US,O=Equifax,
OU=Equifax Secure Certificate Authority
Validity
Not Before: Aug 22 16:41:51 1998 GMT
Not After : Aug 22 16:41:51 2018 GMT
Subject:C=US,O=Equifax,
OU=Equifax Secure Certificate Authority
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:c1:5d:b1:58:67:08:62:ee:a0:9a:2d:1f:08:6d:
91:14:68:98:0a:1e:fe:da:04:6f:13:84:62:21:c3:
d1:7c:ce:9f:05:e0:b8:01:f0:4e:34:ec:e2:8a:95:
04:64:ac:f1:6b:53:5f:05:b3:cb:67:80:bf:42:02:
8e:fe:dd:01:09:ec:e1:00:14:4f:fc:fb:f0:0c:dd:
43:ba:5b:2b:e1:1f:80:70:99:15:57:93:16:f1:0f:
97:6a:b7:c2:68:23:1c:cc:4d:59:30:ac:51:1e:3b:
af:2b:d6:ee:63:45:7b:c5:d9:5f:50:d2:e3:50:0f:
3a:88:e7:bf:14:fd:e0:c7:b9
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 CRL Distribution Points:
DirName:/C=US/O=Equifax
/OU=Equifax Secure Certificate Authority/CN=CRL1
X509v3 Private Key Usage Period:
Not After: Aug 22 16:41:51 2018 GMT
X509v3 Key Usage:
Certificate Sign, CRL Sign
X509v3 Authority Key Identifier:
keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:
4F:33:98:90:9F:D4
X509v3 Subject Key Identifier:
48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:
98:90:9F:D4
X509v3 Basic Constraints:
CA:TRUE
1.2.840.113533.7.65.0:
0...V3.0c....
Signature Algorithm: sha1WithRSAEncryption
58:ce:29:ea:fc:f7:de:b5:ce:02:b9:17:b5:85:d1:b9:e3:e0:
95:cc:25:31:0d:00:a6:92:6e:7f:b6:92:63:9e:50:95:d1:9a:
6f:e4:11:de:63:85:6e:98:ee:a8:ff:5a:c8:d3:55:b2:66:71:
57:de:c0:21:eb:3d:2a:a7:23:49:01:04:86:42:7b:fc:ee:7f:
a2:16:52:b5:67:67:d3:40:db:3b:26:58:b2:28:77:3d:ae:14:
77:61:d6:fa:2a:66:27:a0:0d:fa:a7:73:5c:ea:70:f1:94:21:
65:44:5f:fa:fc:ef:29:68:a9:a2:87:79:ef:79:ef:4f:ac:07:
77:38
如果签发证书的根证书,在浏览器的根信任列表中,浏览器就会主动识别该证书是安全的,反之,浏览器就会提出一个警告。GeoTrust的根证书已经被全球所有主要浏览器:Internet Explorer, Netscape ,Mozila ,Opera, Firefox, Safari安装在缺省的信任根证书列表中,GeoTrust签发的证书被广泛的信任和接受。
|