1. HTTPS工作原理
HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,(目的是安全的获得对称密钥用户后续传输加密)过程的简单描述如下:
a).浏览器讲自己支持的多个加密规则发送给网站
b).网站发送SSL证书(见下节)。网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发
回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
c).浏览器验证/安装证书
1). 验证证书的合法性,如果证书不受受信任,则会给出证书不受信的提示。
2). 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机对称密钥,并用证书中提供的公钥加密。
3). 使用约定好的HASH计算握手消息,并使用生成的随机对称密钥对消息进行加密,最后将之前生成的所有信息发送给网站。
d).网站获取对称密钥,后进行以下操作:
1). 使用自己的私钥将信息解密取出对称密钥,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
2). 使用约定好的HASH计算握手消息,使用对称密钥加密一段握手消息,发送给浏览器。
e).浏览器确认握手结果
浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将
由之前浏览器生成的随机密码并利用对称加密算法进行加密。
f).正常通信,之后,所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
2. SSL证书
2.1 基础
HTTPS核心的一部分是数据传输之前的握手,握手过程确定之后使用的对称密钥。
握手过程中,网站向浏览器发送SSL证书,证书包含了网站域名、有效期、颁发机构、公钥等信息。由于公钥加密只能被申请证书时
产生的私钥解密,所以浏览器在生成对称密钥之前,需先核对当前访问域名与证书域名是否一致,同时对证书的办法机构进行验证,
如果验证失败,浏览器给出证书错误的提示。
2.2 证书的验证过程
证书以证书链的形式组织,首先要有根CA颁发的证书,再有根CA颁发一个中级CA机构的证书,再由中级CA颁发具体的SSL证书。
验证的时候浏览器会对证书链进行一级一级的验证,只有所有证书都是可信任的,整个验证的结果才是可信的。
根CA证书是最关键的,如果根证书不在“可信任的根证书”列表中。则它颁发的所有证书都不受信任。
如果SSL证书验证失败,浏览器会提示 “是否继续访问”。