1. 证书链
1.1. 证书链和交叉认证
证书链,也叫信任链,或称数字证书链(也就是RFC 5280里的证书路径)是
是一连串的数字证书,由根证书为起点,透过层层信任,使终端实体证书的持有者可以获得转授的信任,以证明身份。通常根证书是可信任的自签名证书,并且有如下关系:
- 在证书链上除最后一个证书外,证书颁发者等于其后一个证书的主题。
- 除了最后一个证书,每个证书都是由其后的一个证书签名的。
- 最后的证书是信任主题,由于是通过可信过程得到的,你可以信任它。
证书链用于检查目标证书(证书链里的第一个证书)里的公钥及其它数据是否属于其主题。检查是这么做的,用证书链中的下一个证书的公钥来验证它的签名,一直检查到证书链的尾端,如果所有验证都成功通过,那个这个证书就是可信的。
基于信息安全的考虑,在进行电子商务或使用政府服务时,交易的另一方用户,以根证书为基础,凭借对签发机构的信任,相信当时持有信任链终端的证书持有者确为其人,并透过公开密钥加密确保通信保密、透过数字签名确保内容无误、以及保证对方无法抵赖。
公开密钥基础建设已经在X.509及RFC 5280指定了使用信任链的认证路径验证算法[3]。其中,会透过证书吊销列表及OCSP检查手上得到的证书是否已被证书机构在到期前撤消。另一方面,证书机构签发新的证书时,也可能透过证书透明度公布签发证书的记录,让公众查核,避免有其他机构在未得到当事人同意下滥发欺诈证书伪冒身份。CA/浏览器论坛通过了DNS证书颁发机构授权协议,参与的证书机构会在签发证书前透过域名系统检查是否已获授权。
1.1.1. Example 1: 两个PKI之间的交叉认证
Example 2: CA证书更新 对于具体的证书来说,有一点需要注意的是它可能存在于很不一样的两条或多条证书链中,并且都是合法的。这是因为CA证书可以来自多个颁发者,或者来自相同颁发者但用不同的私钥签发,这样在CA证书上会出现分叉,从而可以出现多条证书链。这也是PKI之间交叉认证和其它应用的关键所在。 [9] 看下面的例子:
在这两个图里:
方块代表证书,加黑的是证书的主题名字。 A → B 表示 "A是由B签发的" (更确切地说,A是由B中所载公钥对应的私钥签署的) 相同颜色(透明色和白色除外)的证书具有相同的公钥 例1: 两个PKI之间的根证书交叉认证 为了让PKI2的用户证书也得到PKI1的信任,CA1生成一包含CA2公钥的证书cert2.1[10] 这时候cert2和cert2.1具体相同的主题及公钥,cert2.2 (User 2)就有了两条合法的证书链:"cert2.2 → cert2" and "cert2.2 → cert2.1 → cert1"。
CA2也可以生成类似的包含有CA1公钥的证书cert1.1,以便PKI1的用户(比如User 1)的证书能在PKI2得到认证。
例2: CA证书更新 Understanding Certification Path Construction (PDF). PKI Forum. September 2002. 为了证书颁发者从旧的私钥顺利地转移到新的私钥,他可以颁发两个证书,其中一个是新的私钥对旧的公钥进行签名,另一个是旧的私钥对新的公钥的签名,这两个都是机构自己给自己颁发的证书,但都不是自签名证书。注:另外还存在新旧两个自签名证书。
假设cert1和cert3具有相同的公钥,对于cert5来说有两条合法的证书链,cert5 → cert1 和 cert5 → cert3 → cert2, cert6的情况也类似。这样就允许老的用户证书可以在新旧两个根证书之间平滑转移。[11]
背景 在互联网中,任何机构都可以登记域名以设立服务器,供大众连接沟通并进行电子商务或使用政府服务。虽然公开密钥加密可以确保通信保密、数字签名可以确保内容无误、以及保证对方无法抵赖;但如果数字证书未获得可供信任的数字证书认证机构数字签名(即自签证书),对方的真实身份仍然可疑[4](除非通信双方早已互相认识并预先透过安全渠道交换数字证书)。数字证书认证机构在公开密钥加密基建担任了非常重要的角色,电脑软件安装并信任了其根证书,根据其私钥签发的下层证书都可(基于数字签名)被自动信任,如果是中介证书,则再下层的终端实体证书也一样被自动信任,此即构成了一条信任链[5]。
举例
维基百科使用的数字证书和信任链 以维基百科为例,其信任链包含了三张数字证书:
维基百科网站因为使用HTTPS,故服务器已安装了数字证书。此证书的主体一栏列明系发给 .wikipedia.org 所使用,故如果用户是连接任何 .wikipedia.org 旗下的网站,此证书都适用。此即终端实体证书,亦是TLS服务器证书(由于使用了通配符,所以也是通配符证书)。 浏览器验证 .wikipedia.org 的数字证书时,除检查其有效期外,还会再检查其上级签发证书,亦即“GlobalSign Organization Validation CA - SHA256 - G2”--这是中介证书,持有机构已根据组织验证确认 .wikipedia.org 的拥有者--维基媒体基金会--在现实世界中的身份。 “GlobalSign Organization Validation CA - SHA256 - G2”是由“GlobalSign Root CA”所发出,由于“GlobalSign Root CA”没有再上级签发机构,它是自签证书。应用软件会检查此证书有否已预载于根证书清单上:如有,则 *.wikipedia.org 的终端实体证书确认为有效,维基百科网站被认为可信任;否则向用户警告网站未获信任。 总括来说,由于用户信任 GlobalSign,所以由 GlobalSign 所担保的维基百科可以被信任。而由于用户信任操作系统或浏览器的软件商,所以由软件商预载了根证书的 GlobalSign 都可被信任。
2. 什么是x509证书链
x509证书一般会用到三类文件,key,csr,crt。 Key是私用密钥,openssl格式,通常是rsa算法。 csr是证书请求文件,用于申请证书。在制作csr文件的时候,必须使用自己的私钥来签署申请,还可以设定一个密钥。 crt是CA认证后的证书文件(windows下面的csr,其实是crt),签署人用自己的key给你签署的凭证。