HTTPS,也称作HTTP over TLS 。TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3 。本文着重描述TLS协议的1.2版本 。
下图描述了在TCP/IP协议栈中TLS(各子协议)和HTTP的关系
文章插图
Credit: Kaushal Kumar Panday From: SSL Handshake and HTTPS Bindings on IIS其中Handshake protocol,Change Ciper Spec protocol和Alert protocol组成了SSL Handshaking Protocols 。
HTTPS和HTTP协议相比提供了
- 数据完整性:内容传输经过完整性校验
- 数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥
- 身份认证:第三方无法伪造服务端(客户端)身份
总览
使用RSA算法的SSL握手过程是这样的:
文章插图
Source: Keyless SSL: The Nitty Gritty Technical Details
- [明文] 客户端发送随机数client_random和支持的加密方式列表
- [明文] 服务器返回随机数server_random,选择的加密方式和服务器证书链
- [RSA] 客户端验证服务器证书,使用证书中的公钥加密premaster secret发送给服务端
- 服务端使用私钥解密premaster secret
- 两端分别通过client_random,server_random和premaster secret生成master secret,用于对称加密后续通信内容
那么什么是证书呢?
文章插图
证书中包含什么信息:
- 证书信息:过期时间和序列号
- 所有者信息:姓名等
- 所有者公钥
互联网有太多的服务需要使用证书来验证身份,以至于客户端(操作系统或浏览器等)无法内置所有证书,需要通过服务端将证书发送给客户端 。
客户端为什么要验证接收到的证书?
中间人攻击
客户端<------------攻击者<------------服务端 伪造证书 拦截请求客户端如何验证接收到的证书?
为了回答这个问题,需要引入数字签名(Digital Signature) 。
+---------------------+| A digital signature ||(not to be confused ||with a digital ||certificate) | +---------+ +--------+| is a mathematical |----哈希--->| 消息摘要 |---私钥加密--->| 数字签名 ||technique used | +---------+ +--------+|to validate the ||authenticity and ||integrity of a ||message, software ||or digital document. |+---------------------+将一段文本通过哈希(hash)和私钥加密处理后生成数字签名 。
假设消息传递在Bob,Susan和Pat三人之间发生 。Susan将消息连同数字签名一起发送给Bob,Bob接收到消息后,可以这样验证接收到的消息就是Susan发送的
+---------------------+| A digital signature ||(not to be confused ||with a digital ||certificate) | +---------+| is a mathematical |----哈希--->| 消息摘要 ||technique used | +---------+|to validate the | ||authenticity and | ||integrity of a | ||message, software | 对|or digital document. | 比+---------------------+ | | | +--------+ +---------+| 数字签名 |---公钥解密--->| 消息摘要 |+--------+ +---------+当然,这个前提是Bob知道Susan的公钥 。更重要的是,和消息本身一样,公钥不能在不安全的网络中直接发送给Bob 。
此时就引入了证书颁发机构(Certificate Authority,CA),CA数量并不多,Bob客户端内置了所有受信任CA的证书 。CA对Susan的公钥(和其他信息)数字签名后生成证书 。
Susan将证书发送给Bob后,Bob通过CA证书的公钥验证证书签名 。
Bob信任CA,CA信任Susan 使得 Bob信任Susan,信任链(Chain Of Trust)就是这样形成的 。
事实上,Bob客户端内置的是CA的根证书(Root Certificate),HTTPS协议中服务器会发送证书链(Certificate Chain)给客户端 。
TLS协议
TLS协议包括TLS Record Protocol和TLS Handshake Protocol 。总览中的流程图仅涉及到TLS Handshake Protocol 。
TLS Record Protocol
在TLS协议中,有四种子协议运行于Record protocol之上
- Handshake protocol
- Alert protocol
- Change cipher spec protocol
- Application data protocol
- 在发送端:将数据(Record)分段,压缩,增加mac(Message Authentication Code)和加密
- 在接收端:将数据(Record)解密,验证MAC,解压并重组
推荐阅读
- 世界上最贵的手机排名第一 世界上最贵的手机是
- 梦到狗很亲热的扑向我 周公解梦梦见狗往怀里扑亲我
- 学习Java必知必会的34个核心知识点
- 瓶装茶 你选对了吗
- PHP的微服务框架预览
- 详解Rsync远程同步服务在windows系统下的安装和配置
- 全面总结买好茶的诀窍
- 金骏眉甘甜 大红袍还有清香
- 分享Oracle的四道经典面试题
- 吃牛蛙是什么梗 基金牛蛙什么梗