导航


HTML

CSS

JavaScript

浏览器 & 网络

版本管理

框架

构建工具

TypeScript

性能优化

软实力

算法

UI、组件库

Node

冷门技能

针对性攻坚(TODO)


HTTP 和 HTTPS 的基本概念

HTTP 和 HTTPS 的区别?

HTTP 传输的数据都是未加密的,也就是明文的,网景公司设置了 SSL 协议来对 HTTP 协议传输的数据进行加密处理,简单来说 HTTPS 协议是由 HTTP 和 SSL 协议构建的可进行加密传输和身份认证的网络协议,比 HTTP 协议的安全性更高。

主要的区别如下:

⭐️ HTTPS 协议的工作原理

1. 客户端发起 HTTPS 请求

示例

Client Hello: TLS version, supported ciphers, compression methods

2. 服务器响应,传递证书

服务器传递的内容包括:

示例

Server Hello: Chosen cipher, Server Certificate (includes public key)

3. 浏览器验证服务器证书

如果证书通过了所有验证,浏览器就认为服务器是可信的。


4. 生成会话密钥并加密传输

接下来,浏览器会采取以下步骤:

这个过程确保了即使有人截获了加密的会话密钥,也无法解密,因为只有服务器拥有对应的私钥。

示例


Client: [Encrypted session key with server's public key]

5. 服务器解密会话密钥

至此,双方共享了一个会话密钥,且这个会话密钥是安全的(因为只有服务器拥有对应的私钥)。


6. 双方使用对称加密进行通信

对称加密相比于非对称加密(RSA、ECC),计算效率更高,因此用于实际的数据传输。而非对称加密(RSA)则主要用于安全的密钥交换。

那么浏览器与服务器如何通过这个会话密钥来加密和解密数据呢?

6.1 加密请求数据

具体的加密步骤如下:

  1. 浏览器获取要发送的数据,如 HTTP 请求的内容(路径、方法、参数等)。
  2. 使用会话密钥和选定的对称加密算法(如 AES)加密数据,生成一个 密文(即加密后的数据)。
  3. 浏览器将加密后的数据通过 HTTPS 传输通道发送给服务器。

加密后的数据即使被拦截,也无法被读取或篡改,除非拥有正确的会话密钥。

6.2 服务器解密请求数据

具体的解密步骤:

  1. 服务器收到加密的 HTTP 请求数据。
  2. 使用会话密钥和相同的对称解密算法对密文进行解密,得到原始的请求内容。
  3. 服务器根据解密后的请求内容进行相应处理,比如处理用户登录信息、查询数据库等。

6.3 加密响应数据

服务器处理完请求后,需要将响应结果返回给浏览器。响应数据也会经过同样的加密步骤:

  1. 服务器将响应内容(如 HTML 页面、JSON 数据、状态码等)准备好。
  2. 使用会话密钥对响应数据进行加密,生成密文。
  3. 服务器将加密的响应数据通过 HTTPS 传输回给浏览器。

6.4 浏览器解密响应数据

浏览器收到服务器加密的响应后,再次使用会话密钥进行解密,还原成可读的响应内容。然后,浏览器会处理和渲染该内容,比如更新页面、展示用户信息等。


7. 数据完整性校验


8. 客户端和服务器的通信

例如: