当前位置: 首页 > news >正文

HTTPS协议原理

HTTPS协议原理

  • 1、HTTPS是什么?
  • 2、什么是加密?
  • 3、为什么需要加密?
  • 4、常见的加密方式
  • 5、数据摘要&&数据指纹
  • 6、HTTPS工作过程探究
    • 6.1、方案1—只使用对称加密
    • 6.2、方案2—只使用非对称加密
    • 6.3、方案3—双方都使用非对称加密
    • 6.4、方案4—非对称加密+对称加密
  • 7、中间人攻击
  • 8、签名和验证
  • 9、证书
  • 10、方案5—非对称加密+对称加密+证书认证

1、HTTPS是什么?

在这里插入图片描述
原来是http然后直接到传输层往下交付,然后发送给对方,对方向上交付,也就是红色这条线。现在多了一层软件层,这层软件层是TLS/SSL,在http之下,在传输层之上,http先经过这层软件层加密然后再向下交付,对方接收到之后到达传输层向上交付需要先解密然后才能获取http请求,也就是青色这条线。我们把http+这层软件层称为https。

HTTPS也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层。
HTTP协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况,因此需要加密。


2、什么是加密?

加密就是把明文(要传输的信息)进行一系列变换,生成密文。
解密就是把密文再进行一系列变换,还原成明文。
在这个加密和解密的过程中,往往需要一个或者多个中间的数据,辅助进行这个过程,这样的数据称为密钥。

在这里插入图片描述
如图,今天我的明文数据是123456,经过密钥加密后就变成XXXXYYYY的密文。然后密文经过密钥解密同样也可以还原出明文。


3、为什么需要加密?

臭名昭著的 “运营商劫持”:

在这里插入图片描述
如图,我们下载一个天天动听的音乐软件,那么就会给我弹出下载信息。该下载网站就是天天动听服务器的地址。未被劫持的效果点,击下载按钮,就会弹出天天动听的下载链接。

在这里插入图片描述
已被劫持的效果,点击下载按钮,就会弹出QQ浏览器的下载链接。这时候我们要下载的是天天动听音乐播放器,但是下载弹出来的网址和名称确实qq浏览器的,这是因为被运营商劫持了。

在这里插入图片描述
我们的网络请求都要经过运营商。现在我要下载一个天天动听的播放器,我要将我的请求发送到天天动听服务器上,但是要先经过运营商,而我们的http请求没有加密,所以运营商就可以获取我们的http请求信息然后进行篡改,本来我要请求的是天天动听播放器的下载地址,响应应该给我返回这个地址,现在运营商获取我的请求信息进行篡改,给我返回的是qq浏览器的下载地址。

所以:因为 http 的内容是明文传输的,明文数据会经过路由器、 wifi 热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击 ,所以我们才需要对信息进行加密。
HTTPS就是在HTTP的基础上进行了加密,进一步的来保证用户的信息安全。


4、常见的加密方式

对称加密:
1、采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密,特征:加密和解密所用的密钥是相同的。
2、常见对称加密算法(了解): DES、 3DES、 AES、 TDEA、 Blowfish、 RC2等。
3、特点:算法公开、计算量小、加密速度快、加密效率高
4、对称加密其实就是通过同一个 “密钥”,把明文加密成密文,并且也能把密文解密成明文。

在这里插入图片描述
如图对称密钥就是用同一个密钥进行加密和解密。比如a=10,b=20,b是密钥,a是明文数据。通过密钥b对明文数据a进行加密形成了tmp。然后对方获取到tmp再通过密钥b进行解密获取到明文数据a。

非对称加密:
1、需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
2、常见非对称加密算法(了解): RSA, DSA, ECDSA。
3、特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。
非对称加密要用到两个密钥,一个叫做 “公钥”,一个叫做 “私钥”。
公钥和私钥是配对的。最大的缺点就是运算速度非常慢,比对称加密要慢很多。

在这里插入图片描述


5、数据摘要&&数据指纹

数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash函数)对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。

摘要常见算法:有 MD5、SHA1、SHA256、SHA512等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)。

摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比。

在这里插入图片描述
如图,现在有一篇文章,这篇文章可能几千字、几万字,具体多少字并不重要。经过一个哈希函数计算就会形成数据摘要,这个数据摘要是固定长度的,比如16、32、64、128等。那么如果这篇文章被改动了,哪怕改动的非常的小,就改了一个字,那么再经过哈希函数计算后的数据摘要跟原来的也会不同,并且跟原来差别会非常大。所以只要数据改动了,那么经过哈希算法计算出的数据摘要就会跟原来的不同,而如果数据没有改动,那么计算出的数据摘要跟原来的数据摘要就会是一样的。通过这种方式就可以判断数据是否被篡改过。

在这里插入图片描述
今天张三下载了一部战狼电影在本地,然后他要上传到百度网盘,那么百度网盘就会在张三账户中保存一部战狼的电影,同时百度网盘会根据这个电影通过哈希函数计算出一个数据摘要,然后将这个摘要保存起来。那么李四这时候下的电影跟张三一样的,他现在也要上传这部电影,那么就会经过如下几个步骤:
1、李四本地客户端用同样的哈希算法形成数据摘要。
2、将这个数据摘要传给百度网盘服务器。
3、百度网盘搜索该摘要。
4、搜索到摘要说明已经存在历史文件,直接将历史上传的文件关联到李四的账户即可,从而实现了秒传功能。
5、没锁搜到说明不存在历史文件,将该电影上传然后保存摘要。

我们在输入账户密码登录时,服务器会拿着账户密码到数据库中进行比对,但是数据库中的密码是不会以明文的方式进行保存的,也严重不推荐这种方式。所以数据库中的密码一般都是通过哈希算法形成数据摘要保存的,那么将来你要登录的时候,根据你的密码形成数据摘要然后跟数据库里的摘要进行比对,如果相等就登录成功,否则登录失败。


6、HTTPS工作过程探究

6.1、方案1—只使用对称加密

在这里插入图片描述
客户端和服务器都有密钥X,客户端的明文请求经过密钥X加密后变成密文请求,然后发送给服务器,服务器收到密文请求再通过密钥X解密,得到明文请求。同理,服务器明文响应经过X加密变成密文,然后发送给客户端,客户端拿到后再通过X进行解密。
但是如果客户端形成密钥X,那么如何告诉服务端呢?如果直接将密钥发送给服务端,那么就可能被中间人获取,中间人获取密钥X之后就可以对请求和响应的密文进行解密,从而获取信息。所以密钥X不能直接明文发送给服务端,而密钥X要加密发送,这就成了鸡生蛋蛋生鸡的问题了。
因此方案一只使用对称加密,首次请求无法同步双方的密钥X。


6.2、方案2—只使用非对称加密

在这里插入图片描述
首先在服务端形成公钥P和私钥S,接着客户端发起请求,服务端先将公钥P发送给客户端,所以客户端就获取公钥P了。公钥P是可以被任何人获取的,包括黑客。
接着客户端发起请求将数据经过公钥P加密,然后将密文发送给服务端,服务端获取密文通过私钥S解密就可以获取数据。而这个私钥S只有服务端有,所以就只有服务器可以解开公钥加密的数据。而服务端给客户端响应的数据通过私钥S进行加密,客户端收到后可以通过公钥进行解密,但是中间人也可以获取公钥然后进行解密。

看似客户端到服务器是没有问题的,实际上也是有问题的。

1、保证了单向的数据安全(临时)。
2、因为使用非对称加密,所以运算速度很慢。


6.3、方案3—双方都使用非对称加密

在这里插入图片描述
首先在客户端形成公钥C和私钥C’,在服务端形成公钥S和私钥S’,客户端首先发起请求将公钥C发送给服务端,服务端获取公钥C并把公钥S返回给客户端,客户端就获取公钥S了,这个过程就是客户端和服务器协商密钥。
接着客户端将数据经过公钥S加密发送给服务端,服务端获取数据经过私钥S’解密。服务器响应数据经过公钥C加密,客户端获取后经过私钥C’解密。
这样只有服务端有私钥S’,所以客户端发送的数据只有服务端可以解密。只有客户端有私钥C’,所以服务端返回的数据只有客户端可以解密。

1、其实也是不安全的,同方案2。
2、通信速度会比较慢。


6.4、方案4—非对称加密+对称加密

在这里插入图片描述
服务端首先形成公钥S和私钥S’。客户端向服务端发起请求,然后服务将公钥S返回给客户端,客户端获取公钥S后形成一个密钥X,然后将密钥X通过公钥S加密后发送给服务端,服务端通过私钥S’解密后获取密钥X。之后客户端和服务端交互都采用密钥X进行加密和解密。这时候中间人获取数据也无法解密出来。
在这个过程中,刚开始进行密钥协商的时候采用非对称加密,后面进行数据交互的时候采用的是对称加密。

解决了安全通信的效率问题。


7、中间人攻击

在这里插入图片描述
前面我们考虑的中间人攻击方式都是在密钥协商之后,下面我们针对方案4进行中间人攻击分析:
1、服务端生成公钥S和私钥S’。
2、客户端向服务器发起请求,服务端给客户端返回公钥S,中间人截取返回数据获取到公钥S,并生成了自己的公钥M和私钥M’,接着篡改数据将自己的公钥M返回给客户端。
3、客户端无法辨别公钥是不是服务端的,客户端认为这个返回的公钥M就是服务端给我的。所以客户端形成密钥X,然后通过公钥M加密再向服务器发起请求。
4、中间人截取客户端的请求,通过自己的私钥M’解密获取到密钥X,然后再用公钥S对密钥X进行加密将请求发给服务端。
5、服务端获取密文通过密钥S’进行解密获取密钥X。此时客户端和服务端都获得了密钥X,但是中间人也获取了密钥X。
6、客户端再将数据通过密钥X加密发送给服务端,此时中间人就可以截取数据然后通过密钥X解密。同时服务端给客户端返回数据,中间人也可以截取然后通过密钥X解密。
此时中间人就可以自由解密、窃取侦听、篡改数据了。
那么经过这个分析,我们会发现实际上方案2和方案3也是不安全的。

那么上面的问题出现在哪里?——客户端无法甄别自己收到的公钥是否是合法的!


8、签名和验证

在这里插入图片描述
现在介绍签名和验证:
数据要先经过哈希函数计算形成数据摘要,接着再通过签名者的私钥加密形成签名。接着把数据和签名合在一起就形成了带有数字签名的数据。
那么进行验证的时候要先将数据和签名分开,然后将数据通过同样的哈希函数计算出数据摘要,接着再将签名通过签名者的公钥解密出来。再把这两个值进行对比,如果相等说明数据没有被篡改,如果不相等说明数据被篡改了。

签名是由签名者来进行的,签名者有一对公钥Q和密钥Q’。签名者进行签名后将数据返回,然后接收者进行验证要有签名者的公钥Q。而签名者的公钥Q一般是内置的,所以就可以通过公钥Q解密然后进行数据验证。

那么如果在途中有人篡改了数据,将来进行验证的时候,解密计算出来的散列值和将数据通过同一个哈希函数计算出来的散列值就不相等,那么就说明有人篡改了数据。
如果在途中有人篡改了数据和签名,把数据篡改了然后用同一个哈希函数计算出数据摘要,紧接着再形成自己的公钥M和密钥M’,对数据摘要通过密钥M’进行加密形成签名,也就是把数据和签名都一起改掉了。将来进行验证的时候由于我只用签名者给我的公钥Q进行解密,因此就会解密失败,说明数据是被篡改过的。

因为内置了使用签名者的公钥Q进行解密,进行后续验证。因此这个世界上就只有签名者有私钥Q’,也就意味着只有签名者才有对数据进行签名的能力。


9、证书

客户端第一次请求得到的返回结果不仅仅有公钥S,实际上客户端得到的是一个证书。

什么是证书?
在这里插入图片描述
如图,证书就是明文数据+签名。数据中包含了公钥、域名、申请者、有效时间等信息。

证书哪来的?谁给的?——CA机构。
当使用https时,公司项目负责人需要向CA机构申请证书,需要提交一系列信息,申请成功才会给你的服务返回证书。

在这里插入图片描述
如图:服务端生成公钥S的私钥S’,接着申请证书,申请证书需要提交域名、申请者、公钥等信息。CA机构也要有自己的公钥A和私钥A’,然后CA机构获取你提交的信息后,通过私钥A’形成签名,然后再将签名和明文数据合在一起形成证书给你返回。接着你再给客户端返回,客户端获取数据就可以通过内置的CA机构的公钥A’进行解密,并把明文数据经过哈希计算,把这两个值一比对,就知道有没有被篡改了。如果相等就说明没有被篡改,那么明文信息中的公钥就是合法的。接着就可以形成自己的密钥X然后通过公钥S加密发送给服务端,服务端接收到通过私钥S’解密就可以获取密钥X,后面它们就基于密钥X进行通信。


10、方案5—非对称加密+对称加密+证书认证

在这里插入图片描述
客户端先发起请求,服务端申请证书,提交自己信息如域名、公钥S、申请者等,然后CA机构进行签名,签名后将证书返回给服务端,服务端再将证书返回给客户端,客户端接收后要进行公钥合法性的验证。如果最后两个值相等就说明数据没有被篡改,公钥是可信任的,如果两个值不相等,说明数据被篡改了,公钥不可信任。

1、中间人对数据进行篡改,那么客户端接收后通过CA机构公钥A解密后的散列值跟数据经过哈希函数计算出的散列值一定不同,说明数据被篡改了。
2、中间人对数据和签名进行篡改,数据篡改后计算出新的数据摘要,再用中间人自己的密钥进行加密形成新的签名,再把它们合在一起给客户端返回。客户端进行验证的时候只认CA机构的公钥,所以叫数据通过哈希函数计算出散列值,然后用CA机构的公钥对签名进行解密,发现解密失败,所以数据被篡改过。
3、中间人也去CA机构申请证书,然后直接把整个证书替换掉了,客户端接收到后进行验证,数据通过哈希函数计算出一个散列值,再用CA机构公钥对签名进行解密,最后发现散列值是相等的。但是!,里面的域名信息发生了变化,因为这时候篡改后的域名就是中间人提供的域名,所以客户端还是能发现数据被篡改了。

通过这种方式,证书无法局部性的被篡改,无论是明文还是签名。并且证书也无法被整体替换。

为什么签名不直接加密,而是要先hash形成摘要?——缩小签名密文的长度,加快数字签名的验证签名的运算速度。

在这里插入图片描述
总结:
HTTPS工作过程中涉及到的密钥有三组。
第一组(非对称加密):用于校验证书是否被篡改。服务器持有私钥(私钥在形成 CSR 文件与申请证书时获得),客户端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些,同时持有对应的公钥)。服务器在客户端请求时,返回携带签名的证书。客户端通过这个公钥进行证书验证,保证证书的合法性,进一步保证证书中携带的服务端公钥权威性。

第二组(非对称加密):用于协商生成对称加密的密钥。客户端用收到的 CA 证书中的公钥(是可被信任的)给随机生成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密密钥。

第三组(对称加密):客户端和服务器后续传输的数据都通过这个对称密钥加密解密。

第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器。
第一组非对称加密的密钥是为了让客户端拿到第二组非对称加密的公钥。

相关文章:

  • 软件包安装管理Gitlab
  • PyTorch 根据官网命令行无法安装 GPU 版本 解决办法
  • MyBatis 详解
  • ffmpeg命令(一):信息查询命令
  • 日志查询:使用 less 命令搜索关键字的方法
  • Spring Boot 中使用 Netty
  • .Net 9 webapi使用Docker部署到Linux
  • Quipus,LightRag的Go版本的实现
  • 猫咪如厕检测与分类识别系统系列【九】视频检测区域在线绘制+支持摄像头+网络摄像头+整体构建【上】
  • 怎样完成本地模型知识库检索问答RAG
  • Linux命令+Git命令
  • mysql数据库的线程连接数、状态 、最大并发数、缓存等参数配置
  • Axios 介绍及使用指南
  • 字节跳动开源 Godel-Rescheduler:适用于云原生系统的全局最优重调度框架
  • 高并发三剑客-本地缓存之王Caffeine-01缓存应用
  • 《忘尘谷》音阶与调性解析
  • 非参数 Spearman 相关在多组学分析中的力量及AI拓展
  • langchain框架-文档加载器详解
  • Arm系统ubuntu20.04中自带的火狐浏览器打开网页B站视频和百度网盘网页视频,视频无法打开,并且没有声音——(本质上解决)
  • DeepSeek-V3技术架构深度解析与性能优化实践
  • 宁波银行一季度净利74.17亿元增5.76%,不良率持平
  • 只在上海!德国剧团新作亚洲首演:一张古典与流行的声音网络
  • 航天科技集团质量技术部部长严泽想升任集团副总经理
  • 魏晓栋已任上海崇明区委常委、组织部部长
  • 上海开展2025年“人民城市 文明风采”群众性主题活动
  • 岭南非遗大IP来上海了,舞剧《英歌》在文化广场连演两场