计网中的HTTP/HTTPS

一、 HTTP(超文本传输协议)

1. HTTP的特点

  • HTTP是超文本传输协议。
  • 是用于服务器传输超文本到本地浏览器的传送协议;
  • 是基于TCP/IP通信协议进行传送数据流(HTML文件、图片文件、查询结果);
  • 是基于应用层的面向对象的协议;
  • 协议工作于客户端-服务器架构之上。浏览器作为HTTP客户端通过URL向HTTP服务器端(即Web服务器)发送请求。Web服务器根据接收到的请求,向客户端发送响应信息;
  • HTTP使用URI(统一资源标识符)来传输数据和建立连接

2. URI(统一资源标识符)

  • HTTP使用URI(统一资源标识符)来传输数据和建立连接;

URL的构造

  • URL是特殊的URI,包含了用于查找某个资源的足够信息,URL的例子如下

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

这里面的分隔符包含:

  1. "//"(协议部分的分隔符)
  2. ":"(域名和端口的分隔符)
  3. "/"(虚拟目录的分隔符)
  4. "?"(文件名和参数的分隔符)
  5. "#"(参数和锚部分的分隔符)

3. HTTP常见的状态码

  1. 1xx 类状态码属于 提示信息 ,是协议处理中的⼀种中间状态,实际⽤到的⽐较少。
  2. 2xx 类状态码表示服务器 成功 处理了客户端的请求,也是我们最愿意看到的状态。
  3. 3xx 类状态码表示客户端请求的资源发⽣了变动,需要客户端⽤新的 URL 重新发送请求获取资源,也就是重定向
  4. 4xx 类状态码表示客户端发送的报⽂有误 ,服务器⽆法处理,也就是错误码的含义。
  5. 5xx 类状态码表示客户端请求报⽂正确,但是 服务器处理时内部发⽣了错误 ,属于服务器端的错误码。

4. HTTP常见字段

参考此文:【HTTP 请求头、响应头常见字段分析_响应头字段-CSDN博客

二、HTTPS(超文本传输安全协议)

1. HTTP和HTTPS有哪些区别?

  • 前者是超文本传输协议,信息是明文传输,存在安全风险。HTTPS则解决HTTP不安全的缺陷,在TCP和HTTP网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输;
  • HTTP建立相对简单,TCP三次握手后就能进行HTTP的报文传输。而HTTPS在三次握手之后,还要进行SSL/TLS的握手过程,才能进入加密报文传输;
  • HTTP的默认端口号为80,HTTPS的默认端口号为443;
  • HTTPS协议需要向CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

2. HTTPS解决了HTTP的什么隐患?

由于HTTP是明文传输,所以安全上会出现三个风险:

  1. 窃听⻛险 ,⽐如通信链路上可以获取通信内容(数据保密性)。
  2. 篡改⻛险 ,⽐如强制植⼊垃圾⼴告,视觉污染(数据完整性)。
  3. 冒充⻛险 ,⽐如冒充淘宝⽹站(通信双方身份的真实性)。

HTTPS在HTTP的基础上,在TCP层加入了SSL/TLS协议,可以很好的解决上面的风险。做到了:

  1. 信息加密 :交互信息⽆法被窃取。
  2. 校验机制 :⽆法篡改通信内容,篡改了就不能正常显示。
  3. 身份证书 :证明淘宝是真的淘宝⽹。

3. HTTPS是如何解决上面的三个隐患的?

(1)混合加密解决窃听风险

HTTPS 采⽤的是对称加密 和**⾮对称加密** 结合的「混合加密」⽅式:

在++通信建立前 采用非对称加密++的方式交换"会话秘钥",后续就不再使用非对称加密;

在++通信建立过程中 全部采用对称加密++的会话秘钥的方式加密明文数据。

  • 对称加密: 只使⽤⼀个密钥,运算速度快,密钥必须保密,⽆法做到安全的密钥交换。
  • ⾮对称加密: 使⽤两个密钥:公钥和私钥,公钥可以任意分发⽽私钥保密,解决了密钥交换问题但速度慢。

(2)摘要算法+数字签名 保证传输的内容不被篡改

i. 摘要算法

为了保证传输的内容不被篡改,我们可以对内容计算出一个唯一的「指纹」,然后连同内容一起发送给对方。对方收到后,先用同样的算法对内容也计算出一个「指纹」,再和发送方传来的「指纹」做比对。如果两者一致,说明内容完好无损;否则,就能判定内容被篡改了。

在计算机里,这个「指纹」是通过**摘要算法(哈希函数)**计算出的哈希值。哈希值具有两个重要特性:唯一性 ------不同内容几乎不可能产生相同的哈希值;不可逆性------无法通过哈希值反向推导出原始内容。

但是,摘要算法真的能保证通信安全吗?

并不能。 它只能保证内容没有被篡改,但无法保证「内容 + 哈希值」这个整体没有被中间人整个替换掉 。因为整个过程**++缺少对消息来源的认证++**------客户端无法确认收到的数据究竟是来自真正的服务器,还是一个冒充者伪造的。

可见,光有摘要算法还不够,我们还需要一种机制来验证消息的身份------也就是证明这条消息确实是来自服务器,而不是别人冒充的。

ii. 数字签名

为了解决摘要算法无法认证消息来源的问题,我们需要引入非对称加密

非对称加密使用一对密钥:

  • 公钥:可以公开给所有人;

  • 私钥:由持有者严密保管,绝不泄露。

这两个密钥可以双向加解密:

  • 公钥加密,私钥解密:目的是保证内容传输安全。因为公钥加密后的内容,只有私钥持有者能解密,其他人无法窥探。

  • 私钥加密,公钥解密 :目的是确认身份。因为私钥只有持有者才有,如果公钥能成功解密某段内容,就能证明该内容确实来自私钥持有者。

实际应用中,考虑到非对称加密性能开销较大,我们不会直接用私钥加密整个内容,而是采用数字签名的方式:服务端用私钥对内容的哈希值进行加密,这段加密后的哈希值就是「数字签名」。

服务端保管私钥,并将对应的公钥预先分发给客户端。当客户端收到「内容 + 数字签名」后,会做两件事:

  1. 用同样的摘要算法计算内容的哈希值;

  2. 用公钥解密数字签名,得到服务端计算的哈希值。

如果两个哈希值一致,且公钥能成功解密签名,就证明:内容未被篡改,且确实来自服务器

(3)数字证书 杜绝冒充

通过前文,我们知道:

  • 可以通过哈希算法来保证消息的完整性;
  • 可以通过数字签名来保证消息的来源可靠性(能确认消息是由持有私钥的⼀⽅发送的);

但是,如果公钥是伪造的呢?是否还缺少身份认证的环节?
设想一下:客户端收到了服务器发来的「内容 + 签名」,也用手里的公钥成功解密了签名,一切看起来都很正常。但问题在于------这个公钥真的是服务器发来的吗? 如果它在传输途中被中间人偷偷换掉,后续所有基于这个公钥的验证都将失去意义。中间人完全可以用自己的私钥生成签名,再把伪造的公钥发给客户端。客户端用假公钥一验,发现能解密通过,便信以为真。此时,表面上一切验证通过,实际上通信早已被劫持。

这就是经典的中间人攻击(Man-in-the-Middle Attack,MITM)

问题的根源在于:客户端无法确认收到的公钥到底属于谁。 就像收到一张写着别人名字的名片,你无法仅凭名片本身确认对方的真实身份。

要解决这个问题,需要一个可信的第三方机构来为公钥作担保,这个机构就是 CA(数字证书认证机构,Certificate Authority)

CA 的核心作用就是将「公钥」与「服务器的真实身份」绑定在一起 ,具体通过颁发数字证书来实现,流程如下:

  1. 服务器将自己的公钥连同身份信息提交给 CA;

  2. CA 审核通过后,将这些信息打包,并用 CA 自己的私钥对其进行数字签名,生成一张数字证书

  3. 服务器向客户端通信时,先将这张证书发送过去;

  4. 客户端收到后,用 CA 的公钥(这个公钥通常预置在操作系统或浏览器中,称为「根证书」)来验证证书上的签名。

如果签名验证通过,说明这张证书确实是由可信的 CA 颁发的,进而可以确认:证书里的公钥确实属于这个服务器,身份可信。

相关推荐
wjcroom3 小时前
一个可以在线多人玩的五子棋开发与布署方法-WebRTC和WebSocket的测试方法
websocket·网络协议·webrtc
ControlRookie6 小时前
第22篇_源码加更 04|chunked 解码器和十六进制块长度解析
http·codesys·plc通信·开源源码
AI备忘录8 小时前
(十九)华为华三锐捷迈普思科 交换机链路聚合配置命令(LACP/静态聚合五厂商对照)
运维·服务器·网络·网络协议·tcp/ip·华为
yonlingxu8 小时前
创客匠人深度陪跑案例:盘活存量 IP,解锁婚恋知识赛道第二增长曲线
网络·网络协议·tcp/ip
且白8 小时前
node、npm通过http-server架设本地服务器(可解决跨域)
服务器·网络协议·http
hiahiahia1239 小时前
HTTP Streaming:为什么 AI 回答经常要边生成边返回?
人工智能·网络协议·http
susplus12 小时前
【HTTP协议】HTTP介绍及基础【C语言爬虫实现】
c语言·爬虫·http·万维网
xieliyu.13 小时前
计算机网络:Fiddler 抓包工具使用教程 + HTTP 协议报文格式详解
java·笔记·计算机网络·测试工具·http·java-ee·fiddler
DLYSB_13 小时前
旧上位机不肯改怎么办:原生 TCP 字节帧接入声光语音终端的改造实录
网络·网络协议·tcp/ip·报警灯