一、 HTTP 和 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 协议具体的工作流程,下面我们拆分解释。
二、 对称加密和非对称加密算法
HTTPS 协议的核心是加密流程,首先我们需要区分三种加密方式:对称加密、非对称加密以及混淆加密。
(1)对称加密
定义:加密方和解密方都使用了相同的密钥,只要保证密钥不会泄露给第三方, 整个通信过程就是安全的。
对称加密算法流程图:
因为对称加密算法整个过程共享同一个密钥,所以使用特点也比较明显。
优点:算法简单,加密速度快;
缺点:安全性低,如果密钥泄露,密文也被中间人拦截,那么信息很容易就会被破解。
在企业生产环境下,常用的对称加密算法有 AES 算法。
(2)非对称加密
在安全性要求更高的场景下,我们需要使用非对称加密,关于非对称加密算法的流程如下:
首先定义两种密钥:一种是公钥(Public Key),给任何需要和接收方通信的客户端保存;另一种是私钥(Private Key),只给接收方自己保存。
对于要发送的原文文本,发送方通过接收方的公钥对内容加密,加密后的内容只有接收方的私钥可以解密。在整个传输过程中,如果发送方的公钥泄露,加密内容也被窃取,也不会导致传输内容被破解(只要接收方的私钥没有泄露)。
常见的非对称加密算法有 RSA 算法(即一种支持变长密钥的公共密钥算法)。
另外,面试官可能会提出 MD5 算法的划分,MD5 是非常常见的加密算法,例如在保存用户密码时经常被使用。但是要区分的是,MD5 算法不是对称和非对称算法,MD5 算法不可逆,主要目的是为了文件校验(例如判断文件是否在传输过程中损坏),或者数字签名等途径。
三 HTTPS 请求流程
1、HTTPS 简化通信模型
2、请求步骤解析
步骤(1):客户端发送一个 HTTPS 请求,例如请求
https://imooc.com
,连接到服务器端的 443 端口(和 HTTP 协议不同,HTTP 默认 80 端口)。步骤(2):服务器端收到握手信息,使用预先配置好的数字证书,即图中的公钥和私钥。如果是自己颁发的证书,那么需要客户端通过浏览器的弹窗验证,如果是组织申请获得,默认直接通过。
步骤(3):传输证书给客户端,证书组装了多种信息,包含证书的颁发机构、证书有效时间、服务器端的公钥,证书签名等。
步骤(4):客户端解析证书,也就是通过 TLS/SSL 协议,判定公钥是否有效,如果发现异常,会弹出警告框。如果校验没有问题,那么客户端会生成一个随机数,然后用上一步传输过来的公钥对随机数进行加密。
步骤(5):客户端将上个步骤随机数加密后的内容传输给服务器端,这个随机数就是两端通信的核心。
步骤(6):服务器端用自己的私钥进行解密,获取解密前的随机数。然后组装会话秘钥,这里私钥和客户端会话秘钥是相同的。
步骤(7):将服务器端用私钥加密后的内容传输给客户端,在客户端用之前生成的随机数组装私钥还原。
步骤(8):客户端用之前的私钥解密获取的信息,也就获取了通信内容。
上述过程中,SSL 和 TLS 协议是核心模块,具体的证书交互流程相对复杂,面试场景基本不会涉及。我们需要关注的是为什么 HTTPS 同时使用非对称加密和对称加密,有两个原因:
(1)对称加密流程两边需要使用相同的密钥,单纯使用对称加密,无法实现密钥交换。
(2)非对称加密:满足安全要求,但是非对称加密的计算耗时高于对称加密的 2-3 个数量级(相同安全加密级别),对于实际的应用场景,例如电商网站,对网络交互高耗时容忍度是非常低的。所以 HTTPS 才先使用非对称交换密钥,之后再使用对称加密通信。
四 数字证书
数字证书是 CA(Certificate Authority)机构发布的,作用是标记通信双方的身份。
CA 机构总共颁布了 DV、OV、EV 三种证书,他们的区别在于可信任程度。
(1)DV 级别证书:域名级别可信,证书中不显示企业信息,安全性较差;
(2)OV 级别证书:企业验证型证书,目前使用最广泛的证书;
(3)EV 级别证书:增强验证型证书,验证最严格的证书,使用者例如 Github 官网。
DV、OV、EV 三种,区别在于可信程度。DV 是最低的,只是域名级别的可信,EV 是最高的,经过了法律和审计的严格核查,可以证明网站拥有者的身份(在浏览器地址栏会显示出公司的名字,例如 Apple、GitHub 的网站)。不同的信任等级的机构一起形成了层级关系。
再简单说下数字签名,数字签名指将通信内容和摘要信息(下面例子中的哈希结果)通过接收方的公钥加密,和原文加密结果一起传输给接收方。接收方拿着自己的私钥解密,判断摘要结果和原文结果是否匹配,数字签名的核心目的是为了防止信息丢失、中间人篡改信息。
举例说明,客户端需要向服务器端发送一段字符串:“Hello,World”,我们首先将 "Hello,World" 通过服务器端的公钥进行加密得到结果 A,假设 "Hello,World" 通过哈希加密算法加密后的结果是 "abc123",将 "abc123" 使用服务器端的公钥进行加密得到结果 B,两者都发送给服务器端。
服务器端收到信息后,先通过自己的私钥对 A 解密,然后再对 B 解密,通过相同的哈希算法计算得到 "Hello,World" 的哈希值,如果相同,说明数据没有被中间人篡改。