前端需要知道的计算机网络知识----HTTPS

127 阅读8分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情

一、简介

HTTPS (全称:Hypertext Transfer Protocol Secure ),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证)保证了传输过程的安全性 。

HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP之间)。这个系统提供了身份验证与加密通讯方法。

HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通[数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护

image.png

1.1 SSL/TLS

大家可以看下阮一峰的文章图解SSL/TLS协议

SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

它是为了解决以下问题而设计的:

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

TLS/SSL的功能实现主要依赖三类基本算法:散列函数hash对称加密非对称加密。这三类算法的作用如下:

  • 基于散列函数验证信息的完整性
  • 对称加密算法采用协商的秘钥对数据加密
  • 非对称加密实现身份认证和秘钥协商

img

1.1.1 散列函数Hash

将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆

例如:MD5、SHA-1、SHA-2、SHA-256 等

特点: 在信息传输过程中,散列函数不能单独实现信息防篡改,由于传输是明文传输,中间人可以修改信息后重新计算信息的摘要,所以需要对传输的信息和信息摘要进行加密。

1.1.2 对称加密

有流式、分组两种,加密和解密都是使用的同一个密钥

例如:DES、DES、3DES、AES、Blowfish、IDEA、RC5、RC6 , AES-GCM、ChaCha20-Poly1305等。相同的秘钥可以用于信息的加密和解密。掌握秘钥才能获取信息,防止信息窃听,其通讯方式是一对一。

优点: 性能高

缺点: 密钥泄露风险高,因为大家共享一个密钥,假如一方泄露这个密码,就没有安全可言。

特点: 对称加密的优势就是信息传输使用一对一,需要共享相同的密码,密码的安全是保证信息安全的基础,服务器和N个客户端通信,需要维持N个密码记录且不能修改密码。

1.1.3 非对称加密

加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密。

非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。

例如: RSA、DSA、ECDSA、 DH、ECDHE

优点: 知道了公钥,也无法计算出来私钥

缺点: 计算量大,需要消耗大量的系统资源,性能低。

特点: 非对称加密的特点就是信息一对多,服务器只需要维持一个私钥就可以和多个客户端进行通信,但服务器发出的信息能够被所有的客户端解密,且该算法的计算复杂,加密的速度慢。

1.2 CA证书

上述我们介绍了SSL/TLS在HTTP中的就角色,我们知道通过非对称加密与服务端通信,那么我们想一下,服务端与客户端需要使用同一个公钥,那么这个公钥是怎么传递给客户端的呢?

如果服务端直接向客户端发送公钥,那么公钥有可能被中间人调包。

image-20221212135700751

上述问题的而解决是依靠数字签名和数字证书。

1.2.1 CA

CA(Certificate Authority)是客户端与服务器都可信赖的第三方权威机构,负责发放和管理数字证书,承担公钥的合法性检验的责任。

数字证书由CA的数字签名和服务器的公钥组成 派发给客户端的数字证书 会被CA的私钥加密,只有CA的公钥才能解密。

首先使用一种 Hash 算法来对公钥和其他信息进行加密,生成一个信息摘要,然后让有公信力的认证中心(简称 CA )用它的私钥对消息摘要加密,形成签名。最后将原始的信息和签名合在一起,称为数字证书。当接收方收到数字证书的时候,先根据原始信息使用同样的 Hash 算法生成一个摘要,然后使用公证处的公钥来对数字证书中的摘要进行解密,最后将解密的摘要和生成的摘要进行对比,就能发现得到的信息是否被更改了。

img

1.3 TLS/SSL 握手过程

握手过程涉及4次通信,通信都是明文的。

bg2014020503.gif

  1. ClientHello消息 :客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做ClientHello请求。主要提供如下消息

    1. 支持的协议版本,例如:TLS 1.0 版,TLS1.3版
    2. 客户端生存的随机数,稍后用于生成对话密钥
    3. 支持的加密算法,例如:RSA公钥
    4. 支持的压缩算法
  2. SeverHello消息:服务器收到客户端请求后,向客户端发出回应,这叫做SeverHello。服务器的回应包含以下内容:

    1. 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
    2. 一个服务器生成的随机数,稍后用于生成"对话密钥"。
    3. 确认使用的加密方法,比如RSA公钥加密。
    4. 服务器证书。
  3. 客户端回应:首先要验证证书的合法性,验证通过后,向服务端发送消息

    1. 证书合法性:

      1. 检查数字签名
      2. 验证证书链
      3. 检查证书有效期,证书是否在有效时间范围
      4. 检查证书撤回状态(撤回的证书证明无效)
    2. 向服务端发送消息

      1. 一个随机数Pre-master。该随机数用服务器公钥加密(只有对应的私钥才能解密),防止被窃听。
      2. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
      3. 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。
  4. 服务器的最后回应:服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的"会话密钥"

    1. 服务器用私钥解密加密的 Pre-master 数据,基于之前交换的两个明文随机数 random_C 和 random_S,计算得到协商密钥:enc_key = Function(random_C, random_S, Pre-Master);
    2. 计算之前接收的hash值,然后解密客户端发送的数据,验证数据和密钥正确性
    3. 验证正确后,编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
    4. 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

二、HTTPS与HTTP的区别

区别HTTPHTTPS
安全性HTTP 明文传输,数据都是未加密的,安全性较差HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好
端口号默认80默认443
URLhttp://https://
用途主要用于信息共享等网站,如博客等用于保护性要求较高的网站,
数据保护HTTP在传输前,数据未加以保护,因此传输过程中易收到攻击HTTPS在数据传输前对数据加以保护,接收者则需要恢复源数据,传输过程中的保护性较高
协议TCP/IPHTTPS是基于HTTP的,但额外添加了TLS/SSL连接加密
CA证书不需要需要, CA申请证,,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等
搜索排名无关有易于搜索排名
响应速度快, HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包较慢与HTTP,HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包