• HTTS 为什么更安全?


    本文已收录于专栏
    ⭐️ 《计算机网络》⭐️

    HTTPS

    引入

    HTTP 最凸出的优点是「简单、灵活和易于扩展、应用广泛和跨平台」。

    但同时也有很多缺点,如:

    • 窃听风险,通信使用明文(不加密),内容可能会被窃听 。
    • 冒充风险,不验证通信方的身份,因此有可能遭遇伪装 。
    • 篡改风险,无法证明报文的完整性,所以有可能已遭篡改 。

    总结一下就是HTTP 存在着极大的信息安全风险。

    这也就是我们经常会在 Web 的登录页面和购物结算界面等使用的是HTTPS通信而不是HTTP的原因。

    为了统一解决HTTP的不足,需要在 HTTP 上再加入加密处理和认证 等机制。

    我们把添加了加密及认证机制的 HTTP 称为 HTTPS(HTTP Secure)。

    即 : HTTPS = HTTP+加密+认证+完整性保护

    也就是说HTTP 加上加密处理和认证以及完整性保护后即是 HTTPS

    SSL协议

    HTTPS 并非是应用层的一种新协议。

    只是HTTP通信接口部分用SSLTLS 协议代替而已。

    上面提到的 加密 + 认证 + 完整性保护 等 都是 SSL协议的功能。

    通常,HTTP 直接和 TCP 通信。当使用 SSL时,则演变成先和 SSL通信,再由 SSLTCP 通信了。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FVBKqRmv-1658934500300)(D:\Note\Computer network\image-20220723105331651.png)]

    SSL是独立于 HTTP 的协议,所以不光是 HTTP 协议,其他运行在应用层的 SMTPTelnet等协议均可配合 SSL协议使用。可以说 SSL是当今世界上应用最为广泛的网络安全技术。

    SSL 很好的解决了上述 HTTP 使用中的风险:

    • 信息加密:交互信息无法被窃取。
    • 身份证书:验证通信方的身份,确保对方不是伪装。
    • 校验机制:无法篡改通信内容,篡改了就不能正常显示。

    加密方式

    在对 SSL进行讲解之前,我们先来了解一下加密方法。

    近代的加密方法中加密算法是公开的,而密钥却是保密的。通过这种方式得以保持加密方法的安全性。

    加密和解密都会用到密钥。没有密钥就无法对密码解密。

    也就是说只要有密钥任何人都能解密,如果密钥被攻击者获得,那加密也就失去了意义。

    加密方式按照密钥分为两类。

    • 加密和解密同用一个密钥的方式称为 共享密钥加密 也被叫做 对称密钥加密 。
      • 共享密钥方式加密时必须将密钥也发给对方。

      • 但是没办法保证密钥安全的转交到对方手中,如果通信被监听那么密钥就可会落入攻击者之手,同时也就失去了加密的意义。

      • 另外还得设法安全地保管接收到的密钥。

    • 使用两把密钥的公开密钥加密的方式称为 非对称密钥加密 。
      • 一个是公钥,这个是可以公开给所有人的;
      • 一个是私钥,这个必须由本人管理,不可泄露。
      • 这两个密钥可以双向加解密的。
      • 比如可以用公钥加密内容,然后用私钥解密,也可以用私钥加密内容,公钥解密内容。
      • 流程的不同,意味着目的也不相同:
        • 公钥加密,私钥解密。这个目的是为了保证内容传输的安全,因为被公钥加密的内容,其他人是无法解密的,只有持有私钥的人,才能解密出实际的内容;
        • 私钥加密,公钥解密。这个目的是为了保证消息不会被冒充,因为私钥是不可泄露的,如果公钥能正常解密出私钥加密的内容,就能证明这个消息是来源于持有私钥身份的人发送的。
      • 一般我们不会用非对称加密来加密实际的传输内容,因为非对称加密的计算比较耗费性能的。
      • 所以非对称加密的用途主要在于通过私钥加密,公钥解密的方式,来确认消息的身份。

    HTTPS 采用的是对称加密非对称加密结合的混合加密机制

    • 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
    • 在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。

    采用「混合加密」的方式的原因:

    • 对称加密只使用一个密钥。
      • 运算速度快,密钥必须保密,无法做到安全的密钥交换,不安全
      • 所以这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方。
    • 非对称加密使用两个密钥。
      • 使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢

    所以应充分利用两者各自的优势,将多种方法组合起来用于通信。

    传送消息采用对称加密机制,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。

    摘要算法

    为了保证传输的内容不被篡改,我们需要对内容计算出一个哈希值,然后同内容一起传输给对方。

    对方收到后,先是对内容也计算出一个哈希值。然后跟发送方发送的哈希值做一个比较。

    如果哈希值相同,说明内容没有被篡改,否则就可以判断出内容被篡改了。

    摘要算法 正是计算机将传输内容计算出哈希值的方法。

    摘要算法计算出来的哈希值是唯一的,且无法通过哈希值推导出内容。

    通过哈希算法可以确保内容不会被篡改,但是并不能保证「内容 + 哈希值」不会被中间人替换,因为这里缺少对客户端收到的消息是否来源于服务端的证明

    也就是说 如果在传输过程中 中间人 将内容 + 哈希值全部拦截并将其全部修改,这样客户端计算出来的哈希值即便是比对正确,信息也是错的。因为哈希值本身就已经被篡改了。

    中间人攻击

    是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方 直接对话,但事实上整个会话都被攻击者完全控制。

    在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。中间人攻击是一个(缺乏)相互认证的攻击。

    大多数的加密协议都专门加入了一些特殊的认证方法以阻止中间人攻击。

    例如,SSL协议可以验证参与通讯的一方或双方使用的证书是否是由权威的受信 任的数字证书认证机构颁发,并且能执行双向身份认证。

    那为了避免这种情况,计算机里会用数字签名算法来解决。

    用数字签名算法对内容的哈希值加密,这样中间人就无法修改哈希值了

    数字证书

    服务端可以向证书颁发机构CA申请证书,以避免中间人攻击(防止证书被篡改)。证书包含三部分内容:证书内容、证书签名算法和签名,签名是为了验证身份。

    服务端把证书传输给浏览器,浏览器从证书里取公钥。证书可以证明该公钥对应本网站。

    数字签名的制作过程

    1. CA使用证书签名算法对证书内容进行hash运算
    2. 对hash后的值用CA的私钥加密,得到数字签名。

    浏览器验证过程

    1. 获取证书,得到证书内容、证书签名算法和数字签名。
    2. 用CA机构的公钥对数字签名解密(由于是浏览器信任的机构,所以浏览器会保存它的公钥)。
    3. 用证书里的签名算法对证书内容进行hash运算
    4. 比较解密后的数字签名和对证书内容做hash运算后得到的哈希值,相等则表明证书可信。

    SSL/TLS握手

    SSL/TLS 协议基本流程:

    • 客户端向服务器索要并验证服务器的公钥。
    • 双方协商生产「会话秘钥」。
    • 双方采用「会话秘钥」进行加密通信。

    前两步也就是 SSL/TLS 的建立过程,也就是 TLS 握手阶段。

    SSL/TLS 协议建立的详细流程:

    1. ClientHello

    首先,由客户端向服务器发起加密通信请求,也就是 ClientHello 请求

    在这一步,客户端主要向服务器发送以下信息:

    (1)客户端支持的 SSL/TLS 协议版本,如 TLS 1.2 版本。

    (2)客户端生产的随机数(Client Random),后面用于生成「会话秘钥」条件之一。

    (3)客户端支持的密码套件列表,如 RSA 加密算法。

    1. SeverHello

    服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello。服务器回应的内容有如下内容:

    (1)确认 SSL/ TLS 协议版本,如果浏览器不支持,则关闭加密通信。

    (2)服务器生产的随机数(Server Random),也是后面用于生产「会话秘钥」条件之一。

    (3)确认的密码套件列表,如 RSA 加密算法。

    (4)服务器的数字证书。

    3.客户端回应

    客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。

    如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:

    (1)一个随机数(pre-master key)。该随机数会被服务器公钥加密。

    (2)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。

    (3)客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供服务端校验。

    1. 服务器的最后回应

    服务器收到客户端的第三个随机数(pre-master key)之后,通过协商的加密算法,计算出本次通信的「会话秘钥」。

    然后,向客户端发送最后的信息:

    (1)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。

    (2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供客户端校验。

    至此,整个 SSL/TLS 的握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用「会话秘钥」加密内容。

    经典面试题

    HTTP 与 HTTPS 区别?

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

    HTTPS 目前有哪些不足?

    既然 HTTPS 那么安全可靠,那为何所有的 Web 网站不一直使用 HTTPS ?

    因为 与纯文本通信相比,加密通信会消耗更多的 CPU 及内存资源。

    如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。

    所以 HTTPSHTTP 要慢 2100 倍 。

    SSL 的慢分两种。

    一种是指通信慢。另一种是指由于大量消耗 CPU 及内存等资源,导致处理速度变慢。

    针对速度变慢这一问题,并没有根本性的解决方案,我们会使用 SSL加速器这种(专用服务器)硬件来改善该问题。该硬件为 SSL通信专用硬件,相对软件来讲,能够提高数倍 SSL的计算速度。仅在 SSL处理时发挥 SSL加速器的功效,以分担负载。

    完结散花

    ok以上就是对 HTTS 为什么更安全? 的全部讲解啦,很感谢你能看到这儿。如果有遗漏、错误或者有更加通俗易懂的讲解,欢迎小伙伴私信我,我后期再补充完善。

    参考文献

    《图解HTTP》
    https://www.xiaolincoding.com

  • 相关阅读:
    Dynamics 365 Environment Variables(环境变量)的应用
    Chapter9:Simulink建模与仿真
    19、商品微服务-srv层实现
    【韩国】UE5的MetaHuman确实可以导入Blender进行编辑。
    Win 下 ncnn 编译运行
    【数据结构】多叉树转换为二叉树-c++代码实现-POJ 3437 Tree Grafting
    搞流式计算,大厂也没有什么神话
    前端Vue返回顶部和底部四个角[样式加方法](代源码和详图)
    基于ResNetRS的宝可梦图像识别
    网络安全(黑客)自学
  • 原文地址:https://blog.csdn.net/m0_66139206/article/details/126025145