HTTPS
- HTTPS(Hyper Text Transfer Protocol Secure):超文本传输安全协议
- 常称为HTTP over TLS, HTTP over SSL, HTTP Secure
- HTTPS的默认端口是443
- HTTPS是在HTTP的基础上使用SSL/TLS来加密报文,对窃听和中间人提供合理的防护
- SSL/TLS也可以用在其他协议上,比如 FTP -> FTPS, SMTP -> SMTPS
SSL/TLS - 工作在哪一层
SSL/TLS - 工作在哪一层
- SSL / TLS 工作在应用层和传输层之间
HTTPS的通信过程
- TCP的3次握手
- TLS的连接
- HTTP请求和响应
TLS 的连接
TLS 的连接
-
1.Client Hello,客户端向服务端打招呼(TLS层)发送的数据内容如下
- TSL的版本号
- 支持的加密组件(Cipher Suite)列表,加密组件是指所有的加密算法及密钥长度
-
一个随机数(Client Random)
-
- Server Hello,服务端响应,响应数据如下
- TLS的版本号
- 选择的加密组件(是从接收到的客户端加密组件列表中挑选出来的)
-
一个随机数(Server Random)
-
- 发送证书(Certificate)
-
服务器的公钥证书(被CA签名过的)
-
Server Key Exchange
- 用以实现ECDHE算法的其中一个参数(Server Params)
- ECDHE是一种密钥交换算法
-
为了防止伪造,Server Params经过了服务器私钥签名
- 用以实现ECDHE算法的其中一个参数(Server Params)
-
5 Server Hello Done
-
告知客户端:协商部分结束
目前为止:客户端和服务器之间通过明文共享了 ClientRandom、Server Random、Server Params
而且,客户端已经拿到了服务器的公钥证书,接下来,客户端会验证证书的真实性
-
-
- Client Key Exchange(用公钥进行了加密)
-
用以实现ECDHE算法的另一个参数(Client Params)
目前为止。客户端和服务器都用来了ECDHE算法的2个参数:Server Params,Client Params
-
客户端,服务器都可以
- 使用ECDHE算法根据ServerParam,Client Params计算出一个新的随机密钥串: Pre-master secret
- 然后结合Client Random,Server Random,Pre-master secret生成一个主密钥
- 最后利用主密钥衍生出其他密钥:客户端发送用的会话密钥,服务端发送的用的会话密钥等
-
- Change Cipher Spec
-
告知服务器:之后的通信采用计算出来的会话密钥进行加密
-
- Finished
- 包含连接至今全部报文的整体校验值(摘要),加密之后发送给服务器
- 这次握手协商是否成功,要服务器是否能够正确解密报文作为判定标准
-
9.Change Cipher Spec
- 告知客户端:服务端解密没有问题,之后的通信采用计算出来的会话密钥进行加密
-
- Finished
- 到目前为止,客户端服务器都验证加密解密没问题,握手正式结束
- 后面开始传输加密的HTTP请求和响应