没那么浅地谈谈HTTP与HTTPS【一】

Posted by UlyC on September 16, 2018

面对愚昧,神们自己也缄口不言 。——《基地》

没那么浅地谈谈HTTP与HTTPS【一】

8月11日,IETF 终于发布了 RFC 8446,标志着 TLS 1.3 协议大功告成 。这是该协议的第一次重大改革,带来了重大的安全性和性能改进。

本来想写一篇简短介绍…结果越写越长,干脆拆分开慢慢写,慢慢发。

一、基本概念

http

HTTP 是一个网络协议,是专门用来帮你传输 Web 内容的。

比如浏览器地址栏打开任意网址http://ulyc.github.io/

加了粗体的部分就是指 HTTP 协议。大部分网站都是通过 HTTP 协议来传输 Web 页面、以及 Web 页面上包含的各种东西(图片、CSS 样式、JS 脚本)。

如果你有一些网络基础知识,就知道http协议存在于四层网络结构中的应用层

HHTP协议为明文传输,所有信息均为可见的,很不安全,信息极易被篡改和劫持,也因此衍生出了相对更为安全的HTTPS。

SSL/TLS

SSL(Secure Sockets Layer),即安全套接层,是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。

网景公司(Netscape)在1994年推出HTTPS协议,以SSL进行加密,这是SSL的起源。 到了1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在那年把 SSL 标准化。标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。   

很多相关的文章都把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。

SSL又分为两层:

  1. SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
  2. SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。 包括SSL握手协议,SSL改变密码协议,SSL警告协议 。

https

HTTPS(Hyper Text Transfer Protocol Secure),即超文本传输安全协议,也称为http over tls等,是一种网络安全传输协议。

相当于工作在应用层(osi七层模型)的http,只不过是在会话层和表示层利用ssl/tls来加密了数据包,说白了就是“HTTP 协议”和“SSL/TLS 协议”的组合,你可以把 HTTPS 大致理解为——“HTTP over SSL”或“HTTP over TLS” 。

编程随想大神做过一个很形象的比喻:

如果原来的 HTTP 是塑料水管,容易被戳破;那么如今新设计的 HTTPS 就像是在原有的塑料水管之外,再包一层金属水管。

一来,原有的塑料水管照样运行;

二来,用金属加固了之后,不容易被戳破。

访问时以https://开头,默认443端口,同时需要证书。现在大部分网站都已经支持https协议,如果经常访问的支持https的网站突然只能以http访问,就要小心了。

二、引入https的必要性

不使用SSL/TLS的HTTP通信,就是不加密的通信。

所有信息明文传播,带来了三大风险:

  1. 窃听风险(eavesdropping):第三方可以获知通信内容。
  2. 篡改风险(tampering):第三方可以修改通信内容。
  3. 冒充风险(pretending):第三方可以冒充他人身份参与通信。

SSL/TLS协议是为了解决这三大风险而设计的,希望达到:

  1. 所有信息都是加密传播,第三方无法窃听。
  2. 具有校验机制,一旦被篡改,通信双方会立刻发现。
  3. 配备身份证书,防止身份被冒充。

互联网是开放环境,通信双方都是未知身份,这为协议的设计带来了很大的难度。而且,协议还必须能够经受所有匪夷所思的攻击,这使得SSL/TLS协议变得异常复杂。

SSL/TLS协议对于以上风险的防护分别作了以下实现:

  1. 加密(encryption):使用密钥协商机制。
  2. 鉴定(identification):依赖CA 认证体系和加密算法。
  3. 认证(verification):依赖CA 认证体系。

三、基本的运行过程

http9.png

应用层

客户端(浏览器、爬虫程序等)向服务器发送符合http协议的请求(http发送的是明文请求,https是经过安全层加密的密文请求),得到服务器返回的响应(同样http是明文响应,https是密文响应),并在本地解析渲染。

安全层

此层是是SSL/TLS所在的位于传输层与应用层之间的一个抽象层,在TCP/IP协议族中勉强可以划分到传输层,在osi七层网络模型中没有严格的对应,一般认为属于 会话层表达层

http与https主要区别就在于是否存在此安全层,本层实现了加密(encryption)(非对称加密),认证(verification),鉴定(identification)。

基本过程是:

  1. 客户端向服务器端索要并验证公钥。
  2. 双方协商生成”对话密钥”
  3. 双方采用”对话密钥”进行加密通信。

上面过程的前两步,称为”握手阶段”,即SSL四次握手。

传输层

http与https协议都是基于传输层的TCP协议。

连接时会进行“三次握手”,断开连接时客户端与服务器进行”四次挥手“。

未完待续


知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。