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 协议替代,网络模型划分如下:
除了 SSL 协议以外,HTTPS 协议还涉及几个重要的概念:CA 证书、混淆加密方式,以及 HTTPS 协议具体的工作流程,下面我们拆分解释。
2.2 对称加密和非对称加密算法
** 面试官提问:** 既然 HTTPS 协议对通信内容进行了加密,那么涉及到了什么加密算法?
题目解析:
HTTPS 协议的核心是加密流程,首先我们需要区分三种加密方式:对称加密、非对称加密以及混淆加密。
(1)对称加密:加密方和解密方都使用了相同的密钥,只要保证密钥不会泄露给第三方, 整个通信过程就是安全的。
因为对称加密算法整个过程共享同一个密钥,所以使用特点也比较明显。
优点:算法简单,加密速度快;
缺点:安全性低,如果密钥泄露,密文也被中间人拦截,那么信息很容易就会被破解。
在企业生产环境下,常用的对称加密算法有 AES 算法。
(2)非对称加密:在安全性要求更高的场景下,我们需要使用非对称加密,关于非对称加密算法的流程如下:
首先定义两种密钥:一种是公钥(Public Key),给任何需要和接收方通信的客户端保存;另一种是私钥(Private Key),只给接收方自己保存。
对于要发送的原文文本,发送方通过接收方的公钥对内容加密,加密后的内容只有接收方的私钥可以解密。在整个传输过程中,如果发送方的公钥泄露,加密内容也被窃取,也不会导致传输内容被破解(只要接收方的私钥没有泄露)。
常见的非对称加密算法有 RSA 算法(即一种支持变长密钥的公共密钥算法)。
另外,面试官可能会提出 MD5 算法的划分,MD5 是非常常见的加密算法,例如在保存用户密码时经常被使用。但是要区分的是,MD5 算法不是对称和非对称算法,MD5 算法不可逆,主要目的是为了文件校验(例如判断文件是否在传输过程中损坏),或者数字签名等途径。
3. 小结
本小节主要给大家简单说明了 HTTPS 协议和传统 HTTP 协议的区别,另外给出了对称加密和非对称加密算法的流程,我们需要掌握不同加密算法的特点,在下一章节中会给大家介绍 HTTPS 协议的具体流程。