• 14.计算机网络---应用层之HTTPS


    HTTP的内容是通过明文传输的不够安全,在此基础之上,衍生出了HTTPS。相较于HTTP,HTTPS多了一层SSL/TSL,会更加安全,并且是密文传输的。

    HTTPS

    概念

    HTTP 协议(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。

    HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。
    在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,需要用HTTP对加密后的数据进行传输,由此可以看出HTTPS是由HTTP和SSL/TLS一起合作完成的

    SSL(Secure Sockets Layer 安全套接字协议),以及它的继任者传输层安全(Transport Layer Security TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
    TLS是SSL的创新安全协议,建立在SSL的基础之上

    SSL/TLS可以理解为在传输层和应用层之间新增了一层,如下图所示:
    在这里插入图片描述
    HTTPS主要作用是:

    (1)对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;

    (2)对网站服务器进行真实身份认证。

    我们经常会在Web的登录页面和购物结算界面等使用HTTPS通信。使用HTTPS通信时,不再用http://,而是改用https://。另外,当浏览器访问HTTPS通信有效的Web网站时,浏览器的地址栏内会出现一个带锁的标记。对HTTPS的显示方式会因浏览器的不同而有所改变。
    在这里插入图片描述

    在学习SSL/TLS加密过程之前,需要先了解对称加密和非对称加密,简单来说就是:
    对称加密:加密方和解密方使用同一个密钥
    非对称加密:使用公钥加密,使用密钥解密
    关于对称加密和非对称加密更加详细的内容,可以查看我之前的博客:ssh远程登录服务—安全机制

    中间人攻击

    如果HTTPS简单的使用对称加密或者非对称加密,都很有可能会造成中间人攻击(也就是数据在请求和响应的过程中,被一个中间人调包,这也是钓鱼网站的常用方法)

    对称加密的中间人攻击

    因为对称加密的过程中,客户端和服务器端使用同一个密钥,所以在用户访问服务器的过程中,需要首先让客户端请求服务器端的密钥,然后服务器将密钥返回给客户端,这之后才能传输数据。
    但是对称加密就很有可能造成如下图这种情况,客户端以为自己访问的事服务端,服务端也以为自己接收到的是客户端的访问,其实都不是,中间人可以轻而易举的获取到客户端和服务端之间的密钥,非常的不安全。
    在这里插入图片描述
    对称加密具有加解密速度快,性能高的特点,也是 HTTPS 最终采用的加密形式

    非对称加密的中间人攻击

    非对称加密也就是响应请求的那一方会产生一对公私钥,然后将公钥发送给对方,以便于对数据进行加密,自己则保留私钥,用于将对方加密过后的数据进行解密。这种方式会比对称加密更加安全一些,但是如何将公钥传输给对方呢?如果直接传公钥,可能也会被中间人调包,如下图所示
    在这里插入图片描述
    由此可见,单独的使用对称加密或者非对称加密都是不够安全的,所以HTTPS采用的是对称加密和非对称加密结合的方式。但是还是需要解决公钥传输的问题,所以HTTPS引入了数字证书、数字签名的概念来解决这个问题。
    在这里插入图片描述

    数字证书

    如何解决公钥传输问题呢?从现实生活中的场景找答案。员工入职时,企业一般会要求提供学历证明,显然不是什么阿猫阿狗的本本都可称为学历,这个学历必须由第三方权威机构(Certificate Authority,简称 CA)即教育部颁发。同理,server 也可以向 CA 申请证书,在证书中附上公钥,然后将证书传给 client,证书由站点管理者向 CA 申请,申请的时候会提交 DNS 主机名等信息,CA 会根据这些信息生成证书。

    CA:权威认证机构,颁发数字证书的机构,而且CA给颁发的证书签名;CA用自己的私钥对需要进行认证的服务端的公钥进行加密,后期验证公钥的时候,再用CA的公钥对需要验证的公钥进行解密
    什么是证书?
      证书就是公钥和私钥,证书是需要和域名绑定的
    证书包含哪些内容?
      证书的发布机构
      证书的有效期
      公钥
      证书所有者(Subject)
      签名所使用的算法
      指纹以及指纹算法
    为什么需要证书?
      为了安全,确定要访问的服务器是真正的我要访问的,不是钓鱼网站;企业用户才会需要购买证书,提升网站的可信度
    证书品牌:
    在这里插入图片描述
    数字证书:证明这个公钥是你的
    数字签名:用来身份识别的,给CA颁发的数字证书签名,证明这个证书是某某公司的,具有可信性。是浏览器来认可CA颁发的证书,证书上有签名。浏览器和CA公司早就达成了合作关系(CA公司会给浏览器产商money)
    数据加密:是数字签名认证通过后,确认证书是有效的,然后再发送数据,发送数据的过程中使用公钥和私钥的加密和解密
    数字证书认证机构的工作过程:
    在这里插入图片描述
    证书颁发和使用过程:
    在这里插入图片描述

    HTTPS的工作原理(也称HTTPS的四次握手)

    讲述HTTPS工作原理之前,我们先看几幅流程图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    具体过程:

    1. 首先,客户端向服务器端发送请求报文,请求与服务端建立连接。
    2. 服务端产生一对公私要,然后将自己的公钥发送给CA机构,CA机构也有一对公私钥,然后CA机构使用自己的私钥将服务端发送过来的公钥进行加密,产生一个CA数字证书。
    3. 服务端响应客户端的请求,将CA机构生成的数字证书发送给客户端。
    4. 客户端将服务端发送过来的数字证书进行解析(因为浏览器产商跟CA机构有合作,所以浏览器中已经保存了大部分CA机构的密钥,用于对服务端发送过来的数字证书进行解密),验证这个数字证书是否合法,如果不合法,会发送一个警告。如果合法,取出服务端生成的公钥。
    5. 客户端取出公钥并生成一个随机码key(其实就是对称加密中的密钥)
    6. 客户端将加密后的随机码key发送给服务端,作为接下来的对称加密的密钥
    7. 服务端接收到随机码key后,使用自己的私钥对它进行解密,然后获得到随机码key。
    8. 服务端使用随机码key对传输的数据进行加密,在传输加密后的内容给客户端
    9. 客户端使用自己生成的随机码key解密服务端发送过来的数据,之后,客户端和服务端通过对称加密传输数据,随机码Key作为传输的密钥。

    推荐几篇关于HTTPS的非常好的博客:
    18 张图彻底弄懂 HTTPS 的原理
    深入理解HTTPS工作原理
    HTTPS原理详解
    HTTPS流程和原理
    HTTPS理论基础及其在Android中的最佳实践

  • 相关阅读:
    策略模式适用场景与具体实例解析
    CSS盒子模型
    Servlet学习(四):urlPattern配置与XML配置
    git学习使用
    【运维】执行nvidia-smi有点卡,解决办法
    Redis三种模式——主从复制,哨兵模式,集群
    诠释韧性增长,知乎Q3财报里的社区优势和商业化价值
    基于盛科芯片的PTP功能总结
    当mysql表从压缩表变成普通表会发生什么
    正则表达式提取器
  • 原文地址:https://blog.csdn.net/weixin_43880061/article/details/126220852