1. 前言

在上一章节中我们介绍了 HTTP 协议相关的面试题目,作为 HTTP 协议的扩展,HTTPS 协议也经常被面试官提起。

因为对于大部分的前端、后端开发者,都接触不到 HTTPS 协议的开发场景,因为我们往往只关注请求路径后缀,例如关注 URL: /get/username,而非路径全称 https://coding.imooc.com/get/username ,所以考察 HTTPS 协议也是对候选人的知识深度的考验。

2.1 HTTP 和 HTTPS 协议

** 面试官提问:** 为什么有了 HTTP 协议后还出现了 HTTPS 协议?HTTPS 协议解决了什么问题?

题目解析:

在研究 HTTPS 协议之前,我们先总结下 HTTP 协议的优点和缺点:

优点 缺点
通信方式简单:基于请求和响应,客户端发起请求,服务器端返回响应 明文通信:信息明文传输,安全性低
无需维护状态:HTTP 是无状态协议,不识别客户端。 没有状态:例如对于需要保持登录状态的网站,需要依靠其他外部方式(Cookie、Session)维护状态。
速度快,效率高。

如上表所示,HTTP 协议牺牲了安全性,换来了效率,但是在某些安全性要求高的场景,使用 HTTP 协议是不合适的。

HTTP 协议的全称是 Hypertext Transfer Protocol,HTTPS 协议的全程是 Hypertext Transfer Protocol Secure,多了一个 Secure(安全)的限制词。从协议上看,HTTPS 协议基于 HTTP 协议,使用 SSL/TLS 协议对传输内容进行加密,从公式上定义:HTTP + SSL(TLS) = HTTPS

HTTPS 协议将 HTTP 协议的通信部分由 SSL 或者 TLS 协议替代,网络模型划分如下:

图片描述

(HTTP 和 HTTPS 模型图)

除了 SSL 协议以外,HTTPS 协议还涉及几个重要的概念:CA 证书、混淆加密方式,以及 HTTPS 协议具体的工作流程,下面我们拆分解释。

2.2 对称加密和非对称加密算法

** 面试官提问:** 既然 HTTPS 协议对通信内容进行了加密,那么涉及到了什么加密算法?

题目解析:

HTTPS 协议的核心是加密流程,首先我们需要区分三种加密方式:对称加密、非对称加密以及混淆加密。

(1)对称加密:加密方和解密方都使用了相同的密钥,只要保证密钥不会泄露给第三方, 整个通信过程就是安全的。

图片描述

(对称加密算法流程)

因为对称加密算法整个过程共享同一个密钥,所以使用特点也比较明显。

优点:算法简单,加密速度快;

缺点:安全性低,如果密钥泄露,密文也被中间人拦截,那么信息很容易就会被破解。

在企业生产环境下,常用的对称加密算法有 AES 算法。

(2)非对称加密:在安全性要求更高的场景下,我们需要使用非对称加密,关于非对称加密算法的流程如下:

图片描述

(非对称加密算法流程)

首先定义两种密钥:一种是公钥(Public Key),给任何需要和接收方通信的客户端保存;另一种是私钥(Private Key),只给接收方自己保存。

对于要发送的原文文本,发送方通过接收方的公钥对内容加密,加密后的内容只有接收方的私钥可以解密。在整个传输过程中,如果发送方的公钥泄露,加密内容也被窃取,也不会导致传输内容被破解(只要接收方的私钥没有泄露)。

常见的非对称加密算法有 RSA 算法(即一种支持变长密钥的公共密钥算法)。

另外,面试官可能会提出 MD5 算法的划分,MD5 是非常常见的加密算法,例如在保存用户密码时经常被使用。但是要区分的是,MD5 算法不是对称和非对称算法,MD5 算法不可逆,主要目的是为了文件校验(例如判断文件是否在传输过程中损坏),或者数字签名等途径。

3. 小结

本小节主要给大家简单说明了 HTTPS 协议和传统 HTTP 协议的区别,另外给出了对称加密和非对称加密算法的流程,我们需要掌握不同加密算法的特点,在下一章节中会给大家介绍 HTTPS 协议的具体流程。