TLS
本文借助wireshark抓包详细的讲解SSL/TLS协议。HTTPS是为了解决http报文明文传输过程中的安全问题。HTTPS是“HTTP over SSL”的缩写。所以要了解HTTPS就必须先了解SSL/TLS协议。 一、HTTP协议的风险 HTTP协议中所有消息都是明文传播,存在如下三大风险 窃听风险(eavesdropping):第三方可以获知通信内容。 篡改风险(tampering):第三方可以修改通信内容。 冒充风险(pretending):第三方可以冒充他人身份参与通信。 为了解决这个三个风险,分别对应如下三个解决方案。 加密:所有信息都是加密传播,第三方无法窃听。 校验:具有校验机制,一旦被篡改,通信双方会立刻发现。 身份验证:配备身份证书,防止身份被冒充。 二、SSL/TLS 发展历史 1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。 1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。 1996年,SSL 3.0版问世,得到大规模应用。 1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。 2006: TLS 1.1. 作为 RFC 4346 发布。主要fix了CBC模式相关的如BEAST攻击等漏洞。 2008: TLS 1.2. 作为RFC 5246 发布 。增进安全性。目前(2015年)应该主要部署的版本。 2015之后: TLS 1.3,还在制订中,支持0-rtt,大幅增进安全性,砍掉了aead之外的加密方式。 由于SSL的2个版本都已经退出历史舞台了,所以本文后面只用TLS这个名字。 一般所说的SSL就是TLS。 三、报文解析(rfc5246) TLS建立连接的过程如下图,先有个大概的印象,后面我们再详细分析。整个需要四次握手。 SSL/TLS工作在应用层和传输层之间,在建立连接的之前需要先建立TCP连接(三次握手),如下图。 3.1 详细过程 (1)Client Hello 从截图中可以看出TLS协议分为两个部分记录协议(Record Layer)和握手协议(Handshake Protocal)。 3.1.1 记录协议(Record Layer) 记录协议根据rfc描述记录协议(Record Layer)有如下4种类型,即上图中Content Type可以取的值。 记录协议(Record Layer) 数据结构 对照着wireshark抓包为:Content Type:Handshake(22), Version: TLS 1.0(0x0301), Length: 512 3.1.2 握手协议(Handshake Protocal) 握手协议(Handshake Protocal)有如下10种类型。 握手协议(Handshake Protocal)数据结构 对照着wireshark抓包为:Handshake Type: Client Hello, Length: 508, Version : TLS 1....