[date: 2018-01-24 19:48] [visits: 12]

HTTPS证书

网站要升级到HTTPS,必不可少的就是HTTPS证书,其作为各种信息的承载体,是证明网站可信的重要凭证,本文的目的在于帮助理解HTTPS证书作为可信凭证的实现原理。

HTTPS概述

HTTPS即HTTP+TLS,在HTTP与TCP之间加入一个加密层,中间传输节点在不知道密钥的前提下,难以破解双方传输的内容。这个加密层协议称为SSL(Secure Sockets Layer)或TLS(Transport Layer Security),TLS是SSL标准化过程中,升级到某个版本后顺便改了个名字。

非对称加密算法

简要描述非对称算法的特点,便于理解后面涉及的知识。

// 用privateKey对内容content签名,通过publicKey验证
sign = encrypt(MD5(content), privateKey);
success = decrypt(sign, publicKey) === MD5(content);

证书的可信度

TLS协议握手阶段,客户端依赖网站服务器的公钥发送加密消息,以确保只有拥有私钥的网站服务器才能解密。证书是公钥的载体,因此至关重要的就是确保客户端收到的证书是服务器所提供的,保证流量不被窃听的关键即解决证书可信度问题。

客户端不能预先知道所有的网站对应的证书,必须借助其它方式判断证书的确是网站提供的,TLS协议判断证书可信度主要借助信任链的传播。可用现实生活中的担保机制帮助理解:甲相信张三,张三为李四提供担保,则甲认为李四可信,同时李四为王五提供担保,则甲认为王五也可信......

上述担保例子的人物对应到计算机名词,甲指客户端,张三和李四是证书颁发机构,王五是你所访问网站提供的证书,其中张三是根证书颁发机构,李四是中级证书颁发机构。客户端(甲)认为网站(王五)可信的充分条件如下:

可借助非对称加密算法的特点满足上述三个条件,每个证书颁发机构与网站,都各自拥有一对密钥,其中私钥只有自己知道,公钥包含在公开的证书中。

证明信任关系依赖非对称加密算法的签名机制,用私钥对内容进行签名可用其对应的公钥验证,若用公钥验证签名成功,表明信息可信,否则表明信息被篡改。

最终网站服务需要做的就是给客户端提供自己的证书(域名,公钥,信任关系-中级证书颁发机构对证书内容的签名)、中级证书颁发机构的证书(公钥,信任关系-根证书颁发机构对证书的签名),客户端再结合自己内置的根证书颁发机构证书,即可确认网站提供的证书是可信的。

网站证书中还包含一些其他信息,如域名,组织信息,中级证书颁发机构信息等,其中域名是必不可少的一个信息,用来确认证书的可信范围,只有与网站域名对应的证书才是可信的。

证书的撤销

已经被证书颁发机构表明可信的证书,在某些情况下可能不再值得信任,例如证书颁发机构的私钥泄露,导致任何人都能为证书签名,从而伪造信任关系,这时需要证书撤销机制让客户端不再相信该证书。依赖该证书的其他证书因为信任链被破坏,也会被认为不可信。

根证书颁发机构的证书出现问题,客户端应及时将其从内置可信列表移除,所有依赖它的中级证书颁发机构,网站证书都将失效。

证书颁发机构验证过的证书出现问题,颁发机构有责任撤销该证书,实现方式有两种:

以上两种方式依赖客户端的实现,但使用这两种方式所需要的信息应在证书颁发机构的证书中提供。

证书颁发机构

证书颁发机构应该是得到大家一致认可的权威机构,有责任核查认证对象所提供的信息,只有信息准确无误才能为其提供信任关系担保。如果某些证书颁发机构存在失责,为不可信的人提供了信任担保,让其得以欺骗他人,应该对证书颁发机构进行惩罚。