HTTPS

目录

1.定义

2.加密

3.HTTPS的工作过程

[3.1 先引入对称加密](#3.1 先引入对称加密)

[3.2 非对称加密](#3.2 非对称加密)

[3.3 中间人攻击](#3.3 中间人攻击)

[3.4 引入公正机构](#3.4 引入公正机构)

4.完整流程

5.总结


上一篇文章我们学习了HTTP协议,本篇文章我们学习HTTPS协议。

1.定义

HTTPS是什么

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

HTTP协议内容都是按照⽂本的方式明文传输的.这就导致在传输过程中出现⼀些被篡改的情况.

明文 + 密钥 =》 密文

密文 + 密钥 =》 明文

2.加密

在密码学中,使用密钥加密,主要有两种方式:

1.对称加密,加密和解密,使用的密钥,是同一个密钥

设密钥为key

明文 + key => 密文

密文 + key => 明文

2.非对称加密,有两个密钥(一对),一个称为"公钥",一个称为"私钥"

用一个钥匙加密,用另一个钥匙解密

明文 + 公钥 => 密文 明文 + 私钥 => 密文

密文 + 私钥 => 明文 密文 + 公钥 => 明文

3.HTTPS的工作过程

目标,针对HTTP这里的header和body进行加密

3.1 先引入对称加密

在上述模型中,服务器不是只和一个客户端通信,而是和很多客户端通信,每个客户端的密钥都不相同,彼此之间才能不知道对方的密钥是啥

此时要求每个客户端对应的密钥都不同,现在就需要每个客户端,在和服务器建立连接的时候,就把密钥给生成出来(此处涉及到一些随机数机制,以保证每个客户端生成的密钥都不同),客户端再把自己的密钥通过网络传输给服务器。此时很可能被黑客截获

如何让密钥更安全的到达服务器呢?

为了解决上述安全传输密钥的问题,引入了非对称加密

3.2 非对称加密

为什么不直接使用非对称加密,还要有对称加密?

进行非对称加密/解密,运算成本是比较高的,运算速度也是比较低的,而对称加密,运算成本低,速度快

使用非对称加密,只是用来进行这种关键环节(传输密钥),成本就比较可控,后续要传输大量的业务数据,都使用效率更高的对称加密,比较友好的做法。如果业务数据都使用非对称加密,整体的传输效率就会大打折扣了

上述 对称加密 + 非对称加密 过程就是HTTPS的

但是上述过程还存在严重的漏洞

3.3 中间人攻击

如何解决上述中间人攻击的问题?

之所以能进行中间人攻击,关键要点在于客户端没有"分辨能力"

3.4 引入公正机构

客户端拿到证书,也就拿到了证书中的公钥

客户端就需要验证这个公钥是否是服务器最初的公钥(是否被黑客篡改了)

这个过程就叫做"证书的校验"

如何进行校验?核心机制,就是"数字签名" -> 被 加密 后的检验和(拿着你数据的每个字节,代入公式,就能算出来一个结果数字,称为校验和,把这个校验和一起发送给对方,对方再按照同样的方式再计算一遍校验和,如果结果一致,就认为数据在传输的过程中,没有改变过)

此时,客户端拿到了数字签名,就可以通过系统内置的公证机构的公钥,进行解密了,得到最初的校验和

客户端再重新计算一遍这里的校验和和解密出来的校验和进行对比,如果校验和一致,就可以认为证书没有被篡改过,公钥就是可信的

那么黑客替换公钥之后,能否自己替换掉数字签名,自己算一个呢? -> 不能

校验和好算,针对校验和加密,需要使用公正机构的私钥,才能进行的

4.完整流程

5.总结

https加密:(面试中的经典面试题)

1.对称加密,加密业务数据

2.非对称加密,加密对称密钥

3.中间人攻击

4.使用证书,校验服务器中的公钥

这样一系列流程,是由SSL这样的协议来规定的(SSL后来改名成了TLS)不仅仅用于HTTPS中,也被用到了很多其他的场景里

相关推荐
恒辉信达11 分钟前
hhdb客户端介绍(53)
数据库·mysql·hhdb·数据库可视化界面客户端
m0_748238271 小时前
WebClient HTTP 请求问题处理模板(泛型响应、忽略 SSL 证书等)
网络协议·http·ssl
୧⍢⃝୨ LonelyCoder2 小时前
FreePBX修改IP地址和端口以及添加SSL证书开启HTTPS访问
tcp/ip·https·ssl
指尖上跳动的旋律2 小时前
shell脚本定义特殊字符导致执行mysql文件错误的问题
数据库·mysql
轩辰~2 小时前
网络协议入门
linux·服务器·开发语言·网络·arm开发·c++·网络协议
一勺菠萝丶2 小时前
MongoDB 常用操作指南(Docker 环境下)
数据库·mongodb·docker
m0_748244833 小时前
StarRocks 排查单副本表
大数据·数据库·python
C++忠实粉丝3 小时前
Redis 介绍和安装
数据库·redis·缓存
wmd131643067123 小时前
将微信配置信息存到数据库并进行调用
数据库·微信
是阿建吖!4 小时前
【Linux】基础IO(磁盘文件)
linux·服务器·数据库