【网络】HTTPS协议原理

发布于:2025-02-27 ⋅ 阅读:(18) ⋅ 点赞:(0)


在这里插入图片描述

1. HTTPS 是什么

HTTP 协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被窃取、篡改的情况

  • 因为 http 的内容是明文传输的, 明文数据会经过路由器、 wifi 热点、 通信服务运营商、 代理服务器等多个物理节点, 如果信息在传输过程中被劫持, 传输的内容就完全暴露了。
  • 劫持者还可以篡改传输的信息且不被双方察觉, 这就是中间人攻击,所以我们才需要对信息进行加密。

HTTPS 也是一个应用层协议,是在 HTTP 协议的基础上引入了一个加密层

在这里插入图片描述
加密就是把明文(要传输的信息)进行一系列变换,生成密文
解密就是把密文再进行一系列变换,还原成明文
在这个加密和解密的过程中,往往需要一个或者多个中间的数据,辅助进行这个过程,这样的数据称为密钥

2. 常见的加密方式

  1. 对称加密

对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密。

  • 特征: 用什么加密就用什么解密(一个密钥)
  • 特点: 算法公开、 计算量小、 加密速度快、 加密效率高
  • 例如:异或运算就是一种简单的对称加密方式
  1. 非对称加密

非对称加密:需要两个密钥来进行加密和解密,这两个密钥是公开密钥(公钥) 和私有密钥(私钥)

  • 特征:通过公钥对明文加密,则需要使用私钥解密(公钥加密,私钥解密);通过私钥对明文加密,则需要使用公钥解密(私钥加密,公钥解密
  • 特点: 算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快

3. 数据摘要

数据摘要(数据指纹),其基本原理是利用单向散列函数(Hash 函数)对信息进行运算,生成一串固定⻓度的数字摘要。

摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比,来判断数据有没有被篡改。

摘要常见算法: 有 MD5、 SHA1、 SHA256、 SHA512 等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)

4. 加密方案测试

4.1 只是用对称加密

在这里插入图片描述

只使用对称加密,首次的时候,双方无法同步密钥!不可靠

4.2 只使用非对称加密

在这里插入图片描述
由于公钥是公开的,因此别人可对服务器加密的信息进行解密,然后窃取数据,因此不可靠

4.3 双方都使用非对称加密

在这里插入图片描述
这种方式貌似是安全的,但其实它和方案二从左向右是一样的,都是不安全的。
其次,都使用非对称加密,速度太慢了。

4.4 对称 + 非对称

在这里插入图片描述
此时,如果中间人在双方交换完对称密钥后,就无法窃取信息了。

如果中间人在双方握手前就来了,那会有什么结果呢?
在这里插入图片描述
对于方案2、3都存在该问题

所以,根本原因在于:客户端无法识别“服务器”发的公钥是不是“真的”

那如何让客户端识别呢?

5. 证书

5.1 数据签名

即:对数据摘要进行加密。

那谁来加密?签名者使用私钥加密(它是非对称加密,也有公钥、私钥)

在这里插入图片描述

此时,如果有人劫持了签名

  • 它能使用签名者的公钥将签名解密查看,也能查看明文的数据
  • 它无法对签名替换,因为如果替换了,它没有签名者的私钥,即使使用别的私钥加密了,验证时用签名者的公钥解不开,直接丢弃
  • 它无法对明文传送的数据进行更改,因为更改以后,对数据做摘要形成的散列值就与原散列值不同了,验证时如果不同,直接丢弃。

所以,如果将服务端的公钥放到签名中,客户端就能知道,该公钥一定是真的,所以签名者至关重要!

那签名者是谁呢? - -CA机构

CA机构(Certificate Authority,证书颁发机构)是负责发放和管理数字证书的权威第三方机构,在公钥基础设施(PKI)中扮演核心角色

5.2 CA 证书

证书:含有证书申请者信息、申请者公钥信息等。 服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了, 证书就如身份证,证明服务端公钥的权威性

服务端在使用 HTTPS 前 需要向 CA 机构申领一份数字证书

在这里插入图片描述

当服务端申请 CA 证书的时候,CA 机构会对该服务端进行审核,并专门为该网站形成数字签名,过程如下:

  1. CA 机构拥有非对称加密的私钥和公钥
  2. CA 机构对服务端申请的证书明文数据进行 hash, 形成数据摘要
  3. 然后对数据摘要用 CA 机构的私钥加密,得到数字签名 S,服务端申请的证书明文和数字签名 S 共同组成了数字证书,这样一份数字证书就可以颁发给服务端了

5.3 方案五 非对称加密 + 对称加密 + 证书认证

在客户端和服务器刚一建立连接的时候,服务器给客户端返回一个证书,证书包含了之前服务端的公钥,也包含了网站的身份信息

所有客户端都会内置CA机构的公钥

在这里插入图片描述
客户端进行认证
当客户端获取到这个证书之后,会对证书进行校验(防止证书是伪造的).

  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构)
  • 验证证书是否被篡改:从系统中拿到该证书发布机构的公钥,对签名解密,得到数据摘要,设为 hash1。然后计算整个证书的 hash 值,设为 hash2。 对比 hash1 和 hash2 是否相等,如果相等, 则说明证书是没有被篡改过的。

中间人能不能整个掉包证书?

  • 中间人没有 CA 私钥, 所以无法制作假的证书,
  • 所以中间人只能向 CA 申请真证书,然后用自己申请的证书进行掉包;这个确实能做到证书的整体掉包,但是别忘记,证书明文中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。
  • 永远记住: 中间人没有 CA 私钥,所以对任何证书都无法进行合法修改,包括中间人自己申请的

总结:
HTTPS 工作过程中涉及到的密钥有三组(双非一对):

  • 第一组非对称加密的密钥(CA机构的)是为了让客户端拿到第⼆组非对称加密的公钥
  • 第⼆组非对称加密的密钥(服务器的)是为了让客户端把对称密钥传给服务器
  • 第三组(对称加密):客户端和服务器后续传输的数据都通过这个对称密钥加密解密(加密/解密速度快)

在这里插入图片描述


常见问题

  1. 为什么摘要内容在网络传输的时候一定要加密形成签名?

如果中间人把数据篡改了,同时也把哈希值重新计算下,客户端就分辨不出来了。所以被传输的哈希值不能传输明文,需要传输密文。

  1. 为什么签名不直接加密, 而是要先 hash 形成摘要?

缩⼩签名密文的⻓度,加快数字签名的验证签名的运算速度

在这里插入图片描述