HTTPS介绍
-
HTTPS(HyperText Transfer Protocal Secure):超文本传输协议,是在HTTP的基础上使用SSL/TLS来加密报文,对窃听和中间人攻击提供合理的防护。
- HTTP over TLS、HTTP over SSL、 HTTP Secure
- HTTPS默认端口是443(HTTP为80)
-
TLS:(Transport Layer Secuity):传输层安全性协议
- 前身是SSL(Secure Sockets Layer):安全套接字
-
SSL/TSL:也可以用在其他协议上
- FTP -> FTPS
- SMTP -> SMTPS
工作在应用层和传输层中间
-
HTTPS的通信过程
- TCP的三次握手
- TLS的连接
- HTTP请求和响应
TLS1.2的连接过程
-
Client Hello
- TLS的版本号
- 一个随机数 (Client Random)
- 支持的加密组件(Cipher Suite)列表, 加密组件是指所使用的加密算法及密钥长度等
-
Server Hello
- TLS的版本号
- 一个随机数 (Server Random)
- 选择的加密组件, 是从接收到的客户端加密组件列表中挑选出来的
-
Certificate
- 服务器的公钥证书(被CA签名过的)
- 服务器的公钥证书(被CA签名过的)
-
Server Key Exchange
ECDHE是一种密钥交换算法, 为了防止伪造, Server Params经过了服务器私钥签名
用以实现ECDHE算法的其中一个参数(Server Params)
-
Server Hello Done
告知客户端: 协商部分结束
目前为止, 客户端和服务器之间通过明文共享了:
Client Random
Server Random
Server Params
而且, 客户端也已经拿到了服务器的公钥证书, 接下来, 客户端会验证证书的真实有效性
Client Key Exchange
这里是目前为止, 客户端和服务器都拥有了ECDHE算法需要的2个参数:
Server Params
、Client Params
,
客户端、服务器都可以使用ECDHE算法根据Server Params、Client Params计算出一个新的随机密钥串: Pre-master secret,
然后结合Client Random、Server Random、Pre-master secret生成一个主密钥,
最后利用主密钥衍生出其他密钥:客户端发送用的会话密钥、服务器发送用的会话密钥等
注意: 这里是两个会话密钥
1: 客户端会话密钥用于客户端发送消息, 以及服务器对该消息进行解密;
2:服务端会话密钥用于服务器发送消息, 以及客户端对该消息进行解密引用
-
Change Cipher Spec
告知服务器: 之后的通信会采用计算出来的会话密钥进行加密
-
Finished
包含连接至今全部报文的整体校验值(摘要), 加密之后发送给服务器; 这次握手协商是否成功, 要以服务器是否能够正确解密该报文作为判定标准
- Change Cipher Spec
- Finished
到此为止, 客户端服务器都验证加密解密没问题, 握手正式结束, 后面开始传输加密的HTTP请求和响应
自己的总结
开始加密通信之前,客户端和服务器都必须建立连接和交换参数,这个过程叫握手(handshake)。
- 客户端给出
TLS协议版本号
,一个客户端随机生成的随机数
(Client random),以及客户端支持的加密套件列表
。 - 服务器返回给客户端
TLS版本
,选中的加密套件
、自己的数字证书、加密套件需要的server Params
、以及一个服务器生成的随机数
(Server random),如果需要双向验证会向客户端索要客户端证书。 - 客户端
确认数字证书的有效性
,客户端返回秘钥套件的一个参数clicent Params
,然后根据Server Params、Client Params 生成一个新的随机数
Premaster random,此随机数用服务器的公钥加密,利用三个随机数可以生成会话秘钥、对之前双方收到的信息生成哈希值,并使用服务器的数字证书中的公钥
,加密这个哈希值,发给服务器。 - 服务器用自己收到的
Server Params、Client Params 也生成一个随机数
Premaster random(跟客户端生成的一致,我不太确定、应该是一直的要不然生成的hash值不一样)、服务器使用的私钥获取客户端发来的哈希值
,根据双方交换的信息也生成一个hash值,做对比,确认是否一致。 - 客户端和服务器根据约定的加密算法,使用前边三个随机数,生成"对话秘钥"(Session Key),用来加密接下来的整个会话过程。