HTTPS 终于搞懂了 ! 上

简介: HTTPS 终于搞懂了 ! 上



相信很多人,对 https 的过程弄不清楚,只是知道 https 是安全加密的,背后的原理,过程并不清楚

笔者曾经也是对 https 的过程并不清楚,一知半解,而且最可气的是每次面试,面试官很可能就问你这个问题

每次都答不对或者答的面试官不满意,说来说去,还是自己没有真正理解

其实 https 的原理过程,并没有那么复杂,只是有些文章没有说清楚,这样的文章看多了,就迷糊了。

在了解 https 原理的过程之前,我们先来了解一下加密的知识

一 加密知识

加密按照加密方式,可以分为以下三种方式

1.1 单向加密

也叫做不可逆加密,对明文的加密产生一个密文,并不能再通过密文,解出来对应的明文

一般用于产生消息摘要,密钥加密等,常见的单向加密有:

  • MD5 : 相信这个大家都都熟悉了,一个明文,md5 以后,对应一个唯一的密文
  • SHA : 其中又分为 sha192 , sha256

特点:

  1. 不可逆
  2. 输入一样,输出必然相同

1.2 对称加密

对称加密,用一个密钥,对明文进行加密,同理,同这把密钥,也可以对密文进行解密

也就是说加密和解密,可以用同一个密钥

这种加密方法就是 对称加密

常用的对称加密方法有:

  • DES
  • 3DES
  • AES

特点:

  1. 加密方和解密使用同一密钥
  2. 加密解密的速度比较快

1.3 非对称加密

我们知道,对称加密使用同一把密钥,相反,非对称加密,使用公钥和私钥进行加密解密

可以使用私钥加密,公钥进行解密,同理,也可以使用公钥加密,私钥进行解密

常见非对称加密方式的有:

  • RSA
  • DSA

我们平时最常用的就是 RSA

特点:

  1. 使用两把密钥进行加密和解密,即公钥和私钥
  2. 公钥加密私钥解密,私钥加密公钥可以解密
  3. 加密或者解密,速度非常慢
  4. 私钥和公钥是成对出现的

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

二 加密知识总结

** 单向加密:** 不可逆,只要输入的内容一样,输出的密文一定是一样的,有任何修改, 产生的密文都是不同的

** 对称加密:** 加密和解密使用同一把密钥,加密解密速度特别快

非对称加密: 使用公钥和私钥进行加密和解密,公钥加密私钥解,私钥加密公钥解。加密解密的过程非常慢

所谓公钥,就是可以公开给别人的

所谓私钥,就是不可以公开给别人,是自己私有保留的。

注:以上内容,纯粹是加密的知识,和 https 没有任何关系。下面我们开始讲解 https 的过程。我们先看一个需求

解决了这个需求,就明白了 https 的过程了。

从一个需求开始

假设有这样一个需求:小明和小花需要通信,少男少女写情书嘛,肯定不想让别人看到,所以需要安全的通信。

问题一:小明如何安全的把内容传给小花?

通过上面的加密知识的学习,我们很容易就想到,把通信的内容,给加密了就行了啊

答案是对的,把通信的内容给加密就行了。

问题二:使用哪种加密方式加密呢?

单向加密肯定不行,小花收到信,解不出来,这恋爱没法谈

对称加密可以 ,小花只要有密钥,就可以把内容解出来

非对称加密也可以 ,小明用自己的私钥加密,小花拿到小明的公钥,也可以把内容解出来

问题三:对称加密,非对称加密都可以,到底使用哪种呢?

通过上面的加密知识的学习,我们知道

对称加密速度快,非对称加密速度慢

那么对于小明,小花这俩人来说,经常一聊就是几个小时,数据是非常多的

如果使用非对称加密,那估计得郁闷死,因为加密也慢,解密也慢,这俩人肯定不会用非对称加密,要是我,我也不用,急死个人。

那么答案就是,使用对称加密方式 ,因为加密快啊,小明小花,都持有同一把密钥,双方互相都能解密出来对方发的信。

总结:小明和小花通信,使用对称加密,假如密钥是 S , 双方都使用同一把密钥 S 进行加密,解密

这样小明和小花就能愉快的通信了,而且内容是加密的,加密解密的速度也很快,这很美好。

但是这样有一个隐患,就是密钥 S , 在传输的过程中,不小心被 老王 截获了

造成的后果就是:小明,小花以及老王,都有相同的密钥 S

那么,小明和小花之间没有秘密可言了,他们发的信,老王都能解开看,看完再加密,再发给小花,这还得了。

那么如何解决 密钥S 在传输的过程中,被别人截获的情况呢?

有人说,可以对称加密方式对密钥S 进行加密, 再传输,那么此时的密钥S1 也是有被截获的风险啊

那就再对 S1 进行加密,再传输...... , 这样就无穷尽了。肯定是行不能的。


上面的方法肯定是不行了,现在的问题,变成了:小明如何把 密钥S 安全的传给小花, 这是不是和之前的问题一小明如何安全的把内容传给小花?类似

所以,小明和小花如何要安全的通信,就需要使用对称加密 把信件内容加密传输

那么就得先解决一个问题:小明如何安全的把密钥S 传输给小花?

问题四:小明如何安全的把密钥S 传输给小花?

如果密钥S 的传输过程不安全,那么后面的通信就是不安全的,反之,如何密钥S 能安全的传输给小花,那么后面的通信就是安全的。

如果这是领导交待给我们这样一个活,我们使用自己学到的上面的加密知识,应该怎么解决呢?

通过上面的加密知识的学习,是不是有下面这样一个安全的加密传输方式

  1. 小明使用非对称加密进行通信,首先小明生成了自己的一对私钥和公钥,为了方便,分别叫做 privateKey, publicKey
  2. 小明把 publicKey 给了小花
  • 方法一 小明用自己的 privateKey,对 密钥S 进行加密,加密后的密文 S0 传输给小花,小花用 publicKeyS0 解密出来 密钥S
  • 方法二 小花用 publicKey密钥S 进行加密,加密后的密文 S0 传输给小明,小明用 privatekeyS0 解密出来 密钥S

上面,方法一 是不可行的,因为小明的 publicKey 是公开的,谁都可以下载,也就是说,老王也有小明的 publicKey,也可以对 S0 进行解密出来 密钥S

方法二是可行的,因为 privateKey 只有小明有,小花用小明的公钥进行加密,只有小明能解开,其它任何人都解不开

所以上面的解决方案就是:

使用非对称加密 方式,对 密钥S 进行加密,进行传输

有人说,不对啊,非对称加密 性能不好,加密解密特别慢,要不刚一开始,小明,小花直接使用非对称加密 进行通信,不就行了嘛

说的是对的,不过我们这里只是使用非对称加密密钥S 进行加密,这个数据量很小的,而且密钥S 安全的传输给对方之后

后面的通信就直接使用对称加密了,这样效率就高了,而非对称加密只是在开始协商怎么安全传输密钥S 的阶段使用了,此阶段完成后,就不再需要使用了。

通过上面可知:非对称加密有这样的特性

我只要拿到谁的公钥,我和谁通信,就是安全的

比如,你有一对私钥和公钥,我只要拿到你的公钥,然后用你的公钥进行加密传输内容,只有你自己能解开,因为私钥只有你自己有

如下:

反过来,小明用自己的私钥加密,其它人使用小明的公钥解密,这个过程的作用是什么的呢?

答案是:验证身份的。

只要小明用自己的私钥加密,其它人用小明的公钥如果能解开,那么证明这封信一定以及肯定是小明写的

比如你需要发一个通知,但是又要确保这个通知一定是你发的,为了怕别人在中间涂改(比如古代假传圣旨,就是没有做好身份验证)

你可以用你的私钥对通知进行加密,其它人想看的话,通过下载你的公钥,进行解密,能解密出来,说明通知一定是你发的。

因为其它人如果在中间涂改,但是又没有你的私钥重新加密,所以是行不通的。

总结 :通过以上的描述,我们解决了好几个问题,经过了以下几个过程。

  1. 小明和小花为了安全的通信,采用加密方式,对内容进行加密传输
  2. 对比来对比去,只能选对称加密这种加密方式,对内容进行加密传输
  3. 但是对称加密的密钥S ,传输过程不安全,容易被老王窃取,怎么办呢
  4. 小明想到了非对称加密方式,于是就生成了一对私钥公钥,并且把公钥给了小花
  5. 小花就用公钥对密钥S 进行加密,传给小明
  6. 因为是用了小明的公钥加密的,又因为私钥只有小明自己有,所以,只有小明能解密。这个过程哪怕老王截获了密文,也解密不了
  7. 这样,小明用自己的私钥解密出来了 密钥S
  8. 此时 小明和小花就用对称加密, 密钥S , 进行愉快的通信了,比如商量彩礼给多少,酒席在哪办,蜜月在哪度
  9. 这样,这个通信过程就是安全的了。

上面的过程很完美,但是道高一尺,魔高一丈啊,老王脑子灵光特别好使啊,又想出来一招

既然你俩用非对称加密,我截取到密文也解密不了,那就换个法子。

如果小花在获取小明的公钥的过程,出了问题,比如小花获取的不是小明的公钥,而且老王的公钥呢(此时小花还以为手里的公钥是小明的呢)

会发生什么?先看一下图(也就是所谓的中间人攻击)

根据上图,老王,也叫做中间人,上图就是中间人攻击,流程如下:

  1. 小花在获取小明公钥的过程中,被老王给掉包成了自己的公钥,发给了小花
  2. 小花误以为手里的公钥是小明的 (其实是老王的公钥了),所以就用老王的公钥对密钥S 进行加密,得到密文S0
  3. 密文S0 发给小明的过程中,被老王拦截,老王就用自己的私钥解密,得到了密钥S
  4. 老王得到密钥S 后,自己备份一份,再把此 密钥S,用小明的公钥加密,得到密文S1, 发给小明
  5. 小明得到 密文S1 后,用自己的私钥解密,得到 密钥S
  6. 以后,小明和小花,就用对称加密方式, 密钥S 进行通信了
  7. 他俩还以为很安全,其实通信的内容早就被老王先看了一遍了。还是不安全

啊啊啊,要疯了,为了通信安全,我们就加密,但是加密的密钥传输又不安全了

为了密钥传输安全,我们生产了私钥公钥对,把公钥给小花,小花用公钥对密钥加密再传输

这样就只有小明能解密了,没曾想,公钥的传输又不安全了。

谈个恋爱好难啊,老王啊,干的都叫啥事啊。。。

出了问题,总得解决啊,现在是传输公钥的过程,又不安全了

这和上面的问题 怎么把信件内容安全的传输给对方?以及怎``么把密钥安全的传输给对方?`` 是类似的

现在这个问题是:怎么把公钥安全的传输给对方?

感觉进入到了死循环了,不管是把 信件内容安全传输,还是把密钥安全传输,还是把 公钥安全安全传输

本质都是类似的,只不过传输的东西不一样,采用的方法不一样

相关文章
|
边缘计算 人工智能 运维
如何构建基于数字孪生的智慧全息路口
全息路口是基于数字孪生技术,将城市道路上的全要素进行数字化还原,进而为交通治理提供一体化解决措施,是为交通精细化治理而生的一款产品。
1802 0
如何构建基于数字孪生的智慧全息路口
|
7月前
|
机器学习/深度学习 人工智能 编译器
本地化部署DeepSeek-R1蒸馏大模型:基于飞桨PaddleNLP 3.0的实战指南
本文基于飞桨框架3.0,详细介绍了在Docker环境下部署DeepSeek-R1-Distill-Llama-8B蒸馏模型的全流程。飞桨3.0通过动静统一自动并行、训推一体设计等特性,显著优化大模型的推理性能与资源利用效率。实战中,借助INT8量化和自动化工具,模型在8卡A100上仅需60GB显存即可运行,推理耗时约2.8-3.2秒,吞吐率达10-12 tokens/s。本文为国产大模型的高效本地部署提供了工程参考,适配多场景需求。
401 2
本地化部署DeepSeek-R1蒸馏大模型:基于飞桨PaddleNLP 3.0的实战指南
|
6月前
|
数据可视化 算法 数据库
深入剖析低代码:实现24小时产品上线的技术机制与优化策略
低代码平台通过高度抽象化与预置资源,将开发周期从数月缩短至一天。其核心在于可视化开发、模块化复用、自动化流程及协作模式升级四大特点。可视化组件让界面搭建更直观;成熟功能模块减少重复开发;自动化工具替代人工操作;实时协作提升效率。此外,低代码还涵盖智能SQL引擎、图表渲染、分布式协作等技术支柱,支持跨数据库兼容、实时流处理和数据治理。通过插件生态适配多行业需求,如AI模型部署、RPA流程自动化等。最终,低代码赋能业务人员参与开发,助力企业敏捷响应市场变化,同时为开发者提供更多创新空间,推动全民开发者时代的到来。
|
8月前
|
人工智能 自然语言处理 PyTorch
Chat2SVG – 文本描述实现高质量矢量图形的生成框架
Chat2SVG 是一个创新的文本到矢量图形生成框架,结合大型语言模型和图像扩散模型,通过多阶段流程生成高质量的 SVG 图形,支持自然语言指令编辑,适用于设计、教育和艺术创作等领域。
343 8
Chat2SVG – 文本描述实现高质量矢量图形的生成框架
|
8月前
|
自然语言处理 供应链 算法
千星计划模式视频号爆单系统开发
比如视频号带货系统、一线公排系统、轻创优选系统等。看起来用户可能是在探索如何利用微信视频号的电商功能,开发一个能够快速提升销量的自动化系统。
|
9月前
|
人工智能 自然语言处理 小程序
用户说 | 文科生的我用DeepSeek+AI程序员半小时开发了一个小程序
用户说 | 文科生的我用DeepSeek+AI程序员半小时开发了一个小程序
用户说 | 文科生的我用DeepSeek+AI程序员半小时开发了一个小程序
|
供应链 安全 芯片
台积电7nm芯片断供影响分析:中国大陆半导体产业的挑战与机遇
近日,有关台积电可能断供中国大陆7nm芯片的消息引发了业界的广泛关注。这一事件不仅关系到全球半导体供应链的稳定性,也对中国大陆半导体产业的发展提出了新的挑战。本文将探讨这一事件背后的原因、可能的影响以及中国大陆半导体产业的应对策略。
655 0
|
机器学习/深度学习 人工智能 自然语言处理
ChatGPT的名字由
【10月更文挑战第13天】
422 0
|
SQL Arthas 运维
取经阿里十年技术大佬,得到Java线上问题排查攻略!
再牛逼的程序员都写不出完美无缺的代码,作为后端开发工程师,一不小心就会遇到线上故障。如果线上故障处理不及时,就可能导致各种严重的后果。恰好最近部门出现了一次挺严重但幸运的是影响面不大的线上故障,最后在阿里工作十年的leader分享了线上问题的排查思路。结合这次分享,写下了这篇Java线上问题排查攻略。
Qt QStandardItemModel(2.超级详细函数)
简介: 本文详细的介绍了TextEdit控件的各种操作,例如:获取内容、输入控件字符、保持在最后一行添加(自动滚屏)、定时关闭、添加数据换行、向鼠标位置插入一行字符、设置字体颜色属性等操作。 本系列QT全面详解文章目前共有十五篇,本系列文章较为详细的讲述了QT控件的基础操作和使用,也谢谢大家的关注、点赞、收藏。
580 0
Qt QStandardItemModel(2.超级详细函数)