JavaEE: HTTPS的魅力与优势揭秘

devtools/2024/10/18 1:38:19/
http://www.w3.org/2000/svg" style="display: none;">

文章目录

  • HTTPS
    • HTTPS 是什么
    • HTTPS 基本工作过程
    • Fiddle 等抓包工具,为啥能解析 HTTPS 的数据?


HTTPS

HTTPS 是什么

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

几个核心概念:

  1. 明文: 要传输的原始数据.
  2. 密文: 把明文进行加密之后得到一个让别人不能理解的数据.
  3. 加密: 明文 -> 密文.
  4. 解密: 密文 -> 明文.
  5. 秘钥: 进行加密和解密的重要数据/辅助工具.

https>https://i-blog.csdnimg.cn/direct/a1deed6de8bd488f8dbe5b9f7454dfbb.png" alt="在这里插入图片描述" />

两类加密算法:

  • 对称加密: 加密和解密都使用同一个秘钥.
  • 非对称加密: 是一对秘钥(从数学角度生成的一对数) A 和 B.
    使用 A 加密,就使用 B 解密.
    使用 B 加密,就使用 A 解密.

HTTPS 基本工作过程

HTTPS 只是在 HTTP 的基础上引入了加密机制.

通过 HTTP 进行传输:

https>https://i-blog.csdnimg.cn/direct/ba06d72a278e4f9883e4d5865c5a7e8d.png" alt="在这里插入图片描述" />
可以看到,如果黑客入侵了路由器,那么黑客就可以对你的数据进行抓包,从而知道你传输了什么数据,甚至进一步的修改这里的数据.

很明显,这样的传输是不安全的.

为了解决上述问题:

  1. 引入对称加密
    https>https://i-blog.csdnimg.cn/direct/4b65d3500253468c8c5694c912d3f31c.png" alt="在这里插入图片描述" />
    引入对称加密之后,即使数据被黑客截获,但是由于黑客不知道秘钥是啥,因此就无法解密,从而保证了数据安全.

    但实际上,事情没这么简单,我们知道,服务器在同一时刻会给多个客户端提供服务.这么多客户端,每个人用到秘钥必须是不同的(如果是相同的,那么秘钥也能被黑客拿到了~),因此服务器就需要维护每个客户端和每个秘钥之间的关联关系.这是一个麻烦的事情.

  2. 传输对称秘钥

    有一个比较理想的做法,就是在客户端和服务器建立连接的时候,双方协商确定这次的秘钥是啥.
    https>https://i-blog.csdnimg.cn/direct/b09b5d44fbd3478dbfd29d5b535292b2.png" alt="在这里插入图片描述" />

    但是如果直接把秘钥明文传输,那么黑客也就知道了,因此秘钥的传输必须加密传输.

  3. 引入非对称加密
    我们可以通过 非对称加密 来对 对称秘钥 进行加密.

    非对称加密,存在的目的不是取代对称加密,而是起到一个辅助对称加密的作用.
    非对称加密只用来加密传输对称密钥.
    因为非对称加密的运算开销比较大,很消耗性能~

    非对称加密,涉及到一对秘钥,公钥和私钥.
    公钥随便公开(人人都知道),只要把私钥保护好.https>https://i-blog.csdnimg.cn/direct/94f403a1e955413d8e4621fb8e7361f1.png" alt="在这里插入图片描述" />
    客户端通过公钥加密 对称密钥,因为黑客没有私钥,所以无法解密.

    这样数据就安全了…吗?

  4. 中间人攻击
    实际上,上述流程存在严重缺陷.

    黑客只需要让他的设备, 在客户端面前假扮服务器,在服务器面前假扮客户端.这样也能够获取到你的数据!!
    https>https://i-blog.csdnimg.cn/direct/da503e3d9e9f48d6a45384c07a09af63.png" alt="在这里插入图片描述" />

  5. 引入证书
    为了避免中间人攻击,于是引入了证书机制~

    出现中间人攻击问题的关键,在于客户端不知道自己拿到的公钥是不是正确的、合理的,不知道是不是黑客伪造的公钥.

    此处,就需要引入第三方公证机构.

    如果你想要搭建服务器,使用 HTTPS 就需要在公证机构这里申请证书(电子的,一串数据)
    申请的时候,就需要提交一些资料(网站的域名,营业执照,备案号等等)

    CA认证_百度百科

    这个证书包含以下信息:

    • 证书发布机构
    • 证书有效期
    • 公钥
    • 证书所有者
    • 签名

    服务器申请到证书之后.后续客户端从服务器拿公钥,就不只是拿公钥,而是拿整个证书.
    客户端拿到证书之后,就可以凭借证书中的签名,来对证书的合法性进行验证.

    客户端验证数字签名:

    1. 客户端把证书的各个字段,再算一次校验和,得到 checksum1

    2. 客户端使用公证机构的公钥,对数字签名进行解密,得到 checksum2

    3. 对比 checksum1 和 checksum2
      如果相等,则视为当前证书的各个字段,就是和服务器发出来的证书是一模一样的,此时就可以认为这是合法证书.
      如果不相等,意味着证书上的内容被黑客篡改过了,此时浏览器就会弹出警告页面来提示用户.

      到这里,你可能想问一个问题: 黑客可不可以篡改数据后,同时更新数字签名,让数字签名解密出来的 checksum2, 和篡改过的 checksum1 一致呢??
      答: 这在理论上不可行! 黑客篡改了数据之后,要想重新生成数字签名,需要使用公证机构的私钥来加密(这个私钥,不是一般的黑客能拿到的).

      黑客如果自己生成一个私钥呢?
      答: 这个时候客户端拿着公正机构的公钥,解密不了黑客的私钥,此时客户端解密出错,也可以认为是证书有问题,也会弹出大大的窗口~

    再来想另一个问题: 客户端如何确定自己手里的公证机构的公钥是正确的,不是黑客伪造的呢?

    答: 这个东西不是通过网络获取的,而是操作系统内置的.黑客难以下手.

Fiddle 等抓包工具,为啥能解析 HTTPS 的数据?

要想解析 HTTPS 的数据,你得拿到对称秘钥,才能够对数据解密.

你使用 Fiddle 的时候,Fiddle 就在对你进行中间人攻击(在开启 HTTPS 选项的时候,弹出来一个框,是否要信任 Fiddle 提供的证书,点击 Yes,表示你允许fiddle对你进行攻击了~).

更具体点:
https>https://i-blog.csdnimg.cn/direct/ff75af29dade4a01a44a51dcd9f88164.png" alt="在这里插入图片描述" />


最后来一道经典面试题:

你在浏览器输入 url 之后,到最终展示出页面为止,这个过程计算机都做了哪些事情?

https>https://i-blog.csdnimg.cn/direct/bd7fcd077f5442c896a5a7d5fcc07c02.png" alt="在这里插入图片描述" />


本文到这里就结束啦~

https>https://i-blog.csdnimg.cn/direct/703e1af8ff51400aa23e56d64d5030ff.gif" alt="在这里插入图片描述" />


http://www.ppmy.cn/devtools/125352.html

相关文章

uniapp学习(003-3 vue3学习 Part.3)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战,开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第21p-第p25的内容 文章目录 双向绑定的实现原理例子 计算属性例子1双向绑定格式改成计算属性 例子2 watchwatc…

Cesium 区域高程图

Cesium 区域高程图 const terrainAnalyse new HeightMapMaterial({viewer,style: {stops: [0, 0.05, 0.5, 1],//颜色梯度设置colors: [green, yellow, blue , red],}});

k8s的pod的管理

常用的Pod基础命令 列出所有命名空间中的所有Pod kubectl get pods --all-namespaces 列出指定命名空间中的所有Pod kubectl get pods -n <namespace> 显示指定Pod的详细信息&#xff0c;包括状态、事件等 kubectl describe pod <pod-name> -n <namespace>…

Django makemigrations时出现TypeError: ‘module‘ object is not iterable

使用Python 3.11、Django 5.1.2 写完model进行makemigrations时出现报错 报错的最下面提到了我自己创建的一个应用里的urls.py&#xff0c;尝试着给里面加上一个列表 然后问题解决了。。。 不知道为什么 makemigrations的时候会去检查urls。。。

【多版本并发控制(MVCC)】

并发事务问题&#xff1a; MySQL隔离级别-未提交读&#xff0c;提交读&#xff0c;可重复读&#xff0c;序列化 隔离级别对于并发事务的解决情况 隔离级别脏读不可重复读幻读未提交读不可不可不可读已提交可不可不可可重复读 &#xff08;默认&#xff09;可可不可串行化&…

es 全文文本分词查询

ES 对 TEXT 类型的分词 我们可以使用分词器来查看分词的结果&#xff0c;默认的分词器是 standard 如果是其他的可以指定分词器 # 标准的分词 POST _analyze {"text": "Hello World!","analyzer": "standard" }全文检索的分词概念 …

基于Springboot+Vue的健康饮食系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

HTML 什么是块级元素?

1、在 HTML 中&#xff0c;元素通常分为两类 块级元素&#xff08;Block Elements&#xff09;&#xff1a; 块级元素占据其父容器的全部宽度&#xff0c;即使内容不足以填满宽度。 块级元素从新的一行开始&#xff0c;并且会把它之后的元素推到下一行。行内元素&#xff08;I…