前端百题斩【41】——HTTPS那些事

412 阅读8分钟

这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战

写该系列文章的初衷是“让每位前端工程师掌握高频知识点,为工作助力”。这是前端百题斩的第41斩,希望朋友们关注公众号“前端点线面”,用知识武装自己的头脑。《前端百题斩(上)》pdf版已出炉了( ^_^ )

img

11.1 HTTP的缺点

正是由于HTTP存在一系列的缺点,所以才会出现HTTPS,那么HTTP存在哪些缺点呢?该如何解决的呢?下面来进行简要概述

1.HTTP通信使用明文(不加密),内容可能会被窃听;

TCP/IP是可能被窃听的网络:按TCP/IP协议族的工作机制,通信内容在所有线路上都有可能遭到窥视。所以需要加密处理防止被窃听,加密的对象如下:

(1)通信的加密

通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,加密HTTP的通信内容。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP称为HTTPS,通过这种方式将整个通信线路加密。

(2)内容的加密

由于HTTP协议中没有加密机制,那么就对HTTP协议传输的内容本身加密。为了做到有效的内容加密,前提是要求客户端和服务器同时具备加密和解密机制。该方式不同于将整个通信线路加密处理,内容仍有被篡改的风险。

2.不验证通信方的身份,因此有可能遭遇伪装;

(1)任何人都可发起请求

HTTP协议不论是谁发送过来的请求都会返回响应,因此不确认通信方,会存在以下隐患:

1)无法确定请求发送至目标的Web服务器是否是按真是意图返回响应的那台服务器,有可能是已伪装的Web服务器;

2)无法确定响应返回到的客户端是否是按照真实意图接收响应的那个客户端,有可能是伪装的客户端;

3)无法确定正在通信的对方是否具备访问权限,因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限;

4)无法判断请求是来自何方、出自谁手,即使是无意义的请求也会照单全收,无法阻止海量请求下的Dos攻击(Denial of Service,拒绝服务攻击)。

(2)查明对手的证书

SSL不仅提供加密处理,还使用了一种被称为证书的手段,可用于确定通信方。 证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。 使用证书,以证明通信方就是意料中的服务器,对使用者个人来讲,也减少了个人信息泄露的危险性。另外,客户端持有证书即可完成个人身份的确认,也可用于对Web网站的认证环节。

3.无法证明报文的完整性,所以有可能已遭遇篡改。

在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。 在请求或响应的传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack)。 仅靠HTTP确保完整性是非常困难的,便有赖于HTTPS来实现。SSL提供认证和加密处理及摘要功能。

11.2 HTTPS基础知识点

HTTPS 并非是应用层的一种新协议。 只是 HTTP 通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security) 协议代替而已,简言之就是HTTP+通信加密+证书+完整性保护构成HTTPS,是身披TLS/SSL这层外壳的HTTP。

image-20210801193609652.png

  1. TLS/SSL功能

TLS/SSL协议使用通信双方的客户证书以及CA根证书,允许客户/服务器应用以一种不能被偷听的方式通信,在通信双方间建立起了一条安全的、可信任的通信通道。

  1. 对称加密和非对称加密(公开密钥加密)

(1)对称加密

对称加密指的是加密数据用的密钥,跟解密数据用的密钥是一样的,使用该方法的优缺点是:

1)优点:加密、解密效率通常比较高、速度快。对称性加密通常在消息发送方需要加密大量数据时使用,算法公开、计算量小、加密速度快、加密效率高。

2)缺点:数据发送方、数据接收方需要协商、共享同一把密钥,并确保密钥不泄露给其他人。此外,对于多个有数据交换需求的个体,两两之间需要分配并维护一把密钥,这个带来的成本基本是不可接受的。

(2)非对称加密

非对称加密指的是加密数据用的密钥(公钥),跟解密数据用的密钥(私钥)是不一样的。公钥就是公开的密钥,谁都可以查到;私钥就是非公开的密钥,一般是由网站的管理员持有。公钥与私钥之间有一定联系:简单来说就是,通过公钥加密的数据,只能通过私钥解开;通过私钥加密的数据,只能通过公钥解开。

  1. 非对称加密(公开密钥加密)存在的问题

非对称加密其实是存在一些问题需要解决的,主要有以下两个:公钥如何获取、数据传输单向安全。

  1. 非对称加密中公钥如何获取

为了获取公钥,需要涉及到两个重要概念:证书、CA(证书颁发机构),其主要用途如下:

(1)证书:可以暂时把它理解为网站的身份证。这个身份证里包含了很多信息,其中就包含了上面提到的公钥。当访问相应网站时,他就会把证书发给浏览器;

(2)CA:用于颁发证书,证书来自于CA(证书颁发机构)。

  1. 证书可能存在的问题

(1)证书是伪造的:压根不是CA颁发的

(2)证书被篡改过:比如将XX网站的公钥给替换了

  1. 证书如何防伪

数字签名、摘要是证书防伪非常关键的武器。“摘要”就是对传输的内容,通过hash算法计算出一段固定长度的串。然后,在通过CA的私钥对这段摘要进行加密,加密后得到的结果就是“数字签名”(明文 --> hash运算 --> 摘要 --> 私钥加密 --> 数字签名);数字签名只有CA的公钥才能够解密。证书中包含了:颁发证书的机构的名字 (CA)、证书内容本身的数字签名(用CA私钥加密)、证书持有者的公钥、证书签名用到的hash算法等。

(1)对于完全伪造的证书

这种情况对证书进行检查

1)证书颁发的机构是伪造的:浏览器不认识,直接认为是危险证书

2)证书颁发的机构是确实存在的,于是根据CA名,找到对应内置的CA根证书、CA的公钥。用CA的公钥,对伪造的证书的摘要进行解密,发现解不了。认为是危险证书

(2)篡改过的证书

1)检查证书,根据CA名,找到对应的CA根证书,以及CA的公钥。

2)用CA的公钥,对证书的数字签名进行解密,得到对应的证书摘要AA

3)根据证书签名使用的hash算法,计算出当前证书的摘要BB

4)对比AA跟BB,发现不一致--> 判定是危险证书

  1. HTTPS问题

(1)与纯文本相比,加密通信会消耗更多的CPU及内存资源

1)由于HTTPS还需要做服务器、客户端双方加密及解密处理,因此会消耗CPU和内存等硬件资源。

2)和HTTP通信相比,SSL通信部分消耗网络资源,而SSL通信部分,由因为要对通信进行处理,所以时间上又延长了。SSL慢分两种,一种是指通信慢;另一种是指由于大量消耗CPU及内存等资源,导致处理速度变慢。

(2)购买证书需要开销。

11.3 HTTPS流程

1.客户端发起HTTPS请求

2.服务端响应,下发证书(公开密钥证书)

3.客户端检查证书,如果证书没问题,那么就生成一个随机值,然后用证书(公钥)对该随机值进行加密。

4.将经过公钥加密的随机值发送到服务端(非对称加密),以后客户端和服务器的通信就可以通过这个随机值进行加密解密了。

5.服务端用私钥解密后,得到了客户端传过来的随机值,然后把内容通过该值进行对称加密。

6.后期的数据传输都是基于该随机值进行加密解密。

img

注:图片来源于(blog.csdn.net/qq_33840251…

1.如果觉得这篇文章还不错,来个分享、点赞吧,让更多的人也看到

2.欢迎关注公众号前端点线面,《前端百题斩》在等你