HTTP vs HTTPS
HTTP缺点 | 解决方案 | 问题范畴 |
---|---|---|
通信使用明文(不加密),内容可能被窃听 | 采用SSL/TLS加密通信 | 加密 |
不验证通信方的身份,因此有可能遭遇伪装 | 使用值得信任的第三方机构办法的证书来确定通信方 | 证书 |
无法验证报文的完整性,有可能已遭篡改 | MAC(Message Authentication Code)报文摘要 | 完整性保护 |
HTTPS概念
- 从解决Http的缺点的角度来看:
HTTP+加密+认证+完整性保护=HTTPS(HTTP Secure)
HTTP加上加密处理和认证以及完整性保护后即是HTTPS
- 从通信协议的角度来看:
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分使用SSL(Secure Socket Layer)/TLS(Transport Layer Security)协议替代而已。所以,HTTPS是身披SSL外壳的HTTP。
HTTPS建立连接的过程
- 对称加密和非对称加密
非对称加密,客户端公钥加密,服务端私钥解密。
相对于对称加密,非对称加密的处理速度要慢一些。
- 在客户端和服务端交换密钥环节,使用非对称加密方式。
- 在建立通信之后的交换报文阶段,则使用对称加密方式。
- 证明密钥正确性:
- 由CA数字证书认证机构背书
- 客户端在接收到数字证书之后,可以使用CA的公钥,对数字证书的数字签名进行校验,一旦验证通过,客户端变可以明确两件事情:一、认证服务器的公开密钥是真实有效的数字证书认证机构,二、服务器的公开密钥是值得信赖的。
HTTPS建立连接的流程:
第一阶段(握手协商)
- 客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的制定版本、加密组件列表(所使用的算法及密钥长度)
- 服务端一Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的
- 服务器发送Certificate报文。报文中包含公钥证书,当然这个公钥证书是使用CA机构的私钥加密过的,同时证书上有数字签名,以便客户端校验。
- 服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
第二阶段
- SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应。报文中包含在后续通信加密中使用的“Pre-master secret”的随机密码串。该报文使用服务器的公钥进行加密。
- 紧接着客户端发送Change Cipher Spec报文。该报文会提示服务器,在此之后的通信会采用Pre-master secret密钥加密
- 客户端发送Finished报文,该报文包含连接至今全部报文的整体报文校验值
- 服务器同样发送Change Cipher Spec报文。
- 服务器同样发送Finished报文。
- 服务器和客户端的Finished报文交换完成后,SSL连接建立完成。通信会受到SSL的保护,从此处开始应用层协议的通信,即发送HTTP请求
Http通信阶段
- 应用层HTTP通信,发送HTTP响应
断开链接
- 最后由客户端断开连接。断开连接时,发送close_notify报文。然后再发送TCP FIN来关闭与TCP的通信。
HTTPS完整性保护
在以上流程中,应用层发送数据时会附加一种叫做MAC(Message Authentication Code)报文摘要,用来校验报文的完整性。
HTTPS的缺点
使用SSL时,处理速度会变慢,增加服务器和客户端的负载,非敏感信息可以直接使用HTTP