• 计算机网络 | 04.[HTTP篇] HTTP与HTTPS


    1. 前置知识——对称加密和非对称加密

    1.1. 对称加密

    对称加密是指在对数据进行加密时,双方都使用 同一个 密钥,这个密钥被称为「会话秘钥」。

    • [优点] 运算速度快;
    • [缺点] 双方都需要对密钥保密,无法做到安全的密钥交换。

    1.2. 非对称加密

    非对称加密是指在对数据进行加密时,双方使用 不同的 密钥,

    生成密钥对的一方将持有「私钥」(通常是服务端,需要保密),另一方则持有「公钥」。

    被「私钥」加密的数据必须使用「公钥」解密,反之亦然。

    • [优点] 能做到安全的密钥交换;
    • [缺点] 运算速度慢。

    2. HTTP的缺陷

    • [无状态] 好处是减轻服务器负担,坏处是完成关联操作时很麻烦,因为无法记忆状态;
    • [明文传输] 好处是方便调试,坏处是信息裸奔;
    • [不安全] 数据明文传输,有窃听风险;传输内容可能被替换,有篡改风险;无法验证对方身份,有冒充风险。

    3. HTTP与HTTPS有哪些区别?

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

    简单地说,HTTPS 就是在 HTTP 的基础上加入了 SSL/TLS协议,通过混合加密、数字签名和数字证书来规避窃听风险、篡改风险和冒充风险。

    image-20220802005812510

    4. HTTPS是如何规避HTTP的三种风险的?

    4.1. 窃听风险——混合加密

    • 窃听风险,比如通信链路上可以获取通信内容,用户号容易没。

    HTTPS传输数据过程中,即用到了非对称加密,也用到了对称加密;

    • [非对称加密] 客户端在生成「会话秘钥」后,用服务端的「公钥」(解密证书得到)对其加密,并安全地发送给服务端;
    • [对称加密] 服务端在收到「会话秘钥」后,双方传输数据时都使用「会话秘钥」对数据进行加密。

    对称加密与非对称加密

    4.2. 篡改风险——数字签名

    • [公钥加密,私钥解密] 保证传输内容不泄露,因为只有私钥才能解密出公钥加密的内容;
    • [私钥加密,公钥解密] 保证身份不被冒充,因为公钥只能解密由对应私钥加密的内容,而私钥是不可泄露的;若数据和私钥都是伪造的,那客户端的公钥无法解密该数据。

    为了保证 发送的数据 不被篡改,在发送数据的同时,也将数据对应的 数字签名 一并发送过去。

    利用哈希算法计算出数据的 哈希值 ,随后使用 私钥 / 公钥 加密便得到 数字签名

    image-20220802021221057

    4.3. 冒充风险——数字证书

    尽管有了混合加密和数字签名,但依旧无法确保传输是安全的;

    在进行数字签名时,有可能出现 数据、哈希值和公钥被同时替换 的可能。

    据此,引入第三方机构:CA(数字证书认证机构),服务器的公钥 注册到CA中,而CA使用 自己的私钥服务器的公钥 进行加密,以得到 数字证书。由于 私钥 仅由CA持有,因此无法被任何人伪造。

    数字证书01.drawio

    5. HTTPS是如何建立连接和传输数据的?

    大致流程可见下图,但其实还有一些细节是不够准确的,如 会话密钥并非是直接传给服务端的,这些会在下一个知识点讲到。

    5.1.准备阶段

    HTTPS传输数据流程-准备阶段

    5.2.建立连接&传输阶段

    HTTPS传输数据流程-传输阶段

    参考文章

    小林coding - HTTP与HTTPS

  • 相关阅读:
    组合计数及补充
    学生信息管理-数据库版
    NoSQL数据库(林子雨慕课课程)
    初识Java 9-2 内部类
    面试题速记:JavaScript有哪些数据类型,它们的区别是?
    Linux常用文件权限命令详解
    网站服务器怎么部署
    初识Pytest自动化测试框架,我彻底懂了
    Debezium监控Oracle数据库
    python函数式编程
  • 原文地址:https://blog.csdn.net/xyxyxyxyxyxyx/article/details/126132909