计网笔记:理解HTTPS

参考视频:https://www.bilibili.com/video/BV1w4411m7GL

HTTP请求过程中,客户端与服务器之间没有任何身份确认的过程,数据全部明文传输,所以很容易遭到黑客的攻击

TLS/SSL加密算法

HTTPS就是HTTP+TLS/SSL

TLS/SSL全称安全传输层协议(Transport Layer Security), 是介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议,所以使用HTTPS基本上不需要对HTTP页面进行太多的改造。

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

这三类算法的作用如下:

  • 基于散列函数验证信息的完整性(数据有没有被篡改)
  • 非对称加密实现身份认证(证明公钥不是伪造的)和秘钥协商(获取对称加密的密钥)
  • 对称加密算法采用协商的秘钥对数据加密

散列函数hash

常见的散列函数有MD5、SHA1、SHA256。该函数的特点:

  • 单向不可逆,对输入数据非常敏感,输出的长度固定
  • 任何数据的修改都会改变散列函数的结果,可以用于防止信息篡改并验证数据的完整性
    • 由于传输是明文传输,中间人可以修改信息后重新计算信息的摘要,所以需要对传输的信息和信息摘要进行加密。

对称加密

对称加密的方法是,双方使用同一个秘钥对数据进行加密和解密。

常见的对称加密算法有AES-CBC、DES、3DES、AES-GCM等。相同的秘钥可以用于信息的加密和解密。掌握秘钥才能获取信息,防止信息窃听,其通讯方式是一对一

问题

  • 就是如何保证秘钥传输的安全性
    • 因为秘钥还是会通过网络传输的,一旦秘钥被其他人获取到,那么整个加密过程就毫无作用了
  • 服务器和N个客户端通信,需要维持N个密钥
    • 如果所有客户端公用一个密钥,黑客就可以伪造成客户端获取密钥来解密其他客户端获得的信息
    • 不同的客户端、服务器数量庞大,所以双方都需要维护大量的密钥,维护成本很高
    • 因每个客户端、服务器的安全级别不同,密钥极易泄露

非对称加密

常见的非对称加密算法有RSA、ECC、DH等。

秘钥成对出现,一般称为公钥(公开)和私钥(保密)。

  • 公钥加密的信息只有私钥可以解开
  • 私钥加密的信息只能公钥解开
  • 服务器持有公钥和私钥
  • 客户端持有公钥

特点:

  • 非对称加密的特点就是信息一对多,服务器只需要维持一个私钥就可以和多个客户端进行通信
  • 计算复杂,加密的速度慢

问题

  • 客户端发到服务器的信息,公钥加密,私钥解密,私钥只有服务器有,所以绝对安全
  • 服务器发到客户端的信息,私钥加密,公钥解密,黑客能拿到公钥!危险!

对称+非对称加密

结合对称加密和非对称加密的优点提出的方式:

  • 非对称加密:保证客户端向服务器发送的信息(公钥加密,私钥解密),绝对安全
  • 对称加密:只有客户端和服务器拥有密钥时,绝对安全

如图:

  1. 客户端向服务器索要公钥,服务器发送公钥
  2. 客户端生成随机数1,用公钥加密,发给服务器,安全,因为只能用私钥解密
  3. 服务器用私钥解密,获取随机数1
  4. 客户端和服务器都有随机数1了,之后的通信都使用这个数进行对称加密
image-20220409174219331

中间人攻击

以上方法看似很安全,但是无法防范中间人攻击

黑客组装一个伪装的服务器,也存储了一组私钥和公钥

  • 黑客拦截服务器发给客户端的公钥,把假公钥发给客户端
  • 客户端用假公钥加密随机数发给黑客,黑客就能用假私钥解密
  • 这样黑客可以获取所有与用户的通信
  • 同时黑客再伪装成客户端去跟服务器通信
image-20220409174302047

数字证书

中间人攻击的根本原因是用户使用了黑客提供的假公钥,所以验证公钥是真实可信的才进行通信就行了

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

这个方法最要的是认证中心的可靠性,一般浏览器里会内置一些顶层的认证中心的证书,相当于我们自动信任了他们,只有这样才能保证数据的安全。

image

HTTPS握手过程

image-20220409161130494 image-20220409180911914

HTTPS的通信过程如下:

  1. 客户端向服务器发起请求,请求中包含使用的协议版本号、生成的一个随机数1、以及客户端支持的加密方法。
  2. 服务器端接收到请求后,确认双方使用的加密方法、并给出服务器的证书、以及一个服务器生成的随机数2
  3. 客户端确认服务器证书有效
  4. 客户端生成一个新的随机数3,并使用数字证书中的公钥,加密这个随机数3,然后发给服务器。并且还会提供一个前面所有内容的 hash 的值,用来供服务器检验。
    • 发送公钥加密的随机数3+前面所有内容的 hash 的值
      • 随机数1、2可能被截获,但随机数3绝对安全
      • hash是让服务器验证随机数1、2有没有被篡改
  5. 服务器使用自己的私钥,来解密客户端发送过来的随机数3。并提供前面所有内容的 hash 值来供客户端检验。
    • 发送前面所有内容的 hash 值来供客户端检验
      • hash是让客户端验证随机数1、2、3没有被篡改
  6. 客户端和服务器端根据约定的加密方法使用前面的三个随机数,生成对话秘钥,以后的对话过程都使用这个秘钥来加密信息。

HTTPS优缺点

HTTPS的优点如下:

  • 使用HTTPS协议可以认证用户和服务器,确保数据发送到正确的客户端和服务器;
  • 使用HTTPS协议可以进行加密传输、身份认证,通信更加安全,防止数据在传输过程中被窃取、修改,确保数据安全性;
  • HTTPS是现行架构下最安全的解决方案,虽然不是绝对的安全,但是大幅增加了中间人攻击的成本

HTTPS的缺点如下:

  • HTTPS需要做服务器和客户端双方的加密解密处理,耗费更多服务器资源,过程复杂;
  • HTTPS协议握手阶段比较费时,增加页面的加载时间;
  • SSL证书是收费的,功能越强大的证书费用越高;
  • HTTPS连接服务器端资源占用高很多,支持访客稍多的网站需要投入更大的成本;
  • SSL证书需要绑定IP,不能再同一个IP上绑定多个域名。
------ 本文结束 ❤ 感谢你的阅读 ------
------ 版权信息 ------

本文标题:计网笔记:理解HTTPS

文章作者:Lury

发布时间:2022年04月09日 - 17:10

最后更新:2022年04月14日 - 23:30

原始链接:https://luryzhu.github.io/2022/04/09/computerNetwork/HTTPS/

许可协议:署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。