HTTPS协议原理

1. 什么是https

网络协议栈当中,传输层和网络层是在操作系统内部,应用层的请求是交给了传输层,而操作系统不管对数据的加密,只负责如何进行数据传送问题。

http协议中,用户的请求、响应、提交参数这些用户信息都是在http协议的请求当中,然后http向下交付,此时如果中间有人要读取我们的信息,是能够直接拿到的,这是不安全的。

于是便有人在应用层添加了一层软件层:ssl加密解密层,发送的请求通过加密再交付,那么在这个中间(操作系统、网络)就不知道传输的是什么数据,只有服务端和客户端的应用层才知道。

ssl这种加密解密协议,都是外部标准组织规范的

image-20240316155429685

以上就是https协议,基于http在应用层封装了一个软件层,http的要发送的内容,先交给软件层加密,然后再发给操作系统。

层和层之间是解耦的,每层只需要知道要发送的是什么东西即可

是否有绝对安全的网络协议?

无论怎样的加密解密方式,随着时代的进步和算力的进步,总会发现漏洞,所以没有绝对安全的网络协议。

那该如何看待网络协议的安全呢?攻破的成本 > 攻破的收益

2. 什么是加密

加密就是把明文(所需传输的信息)通过一系列的转换变成密文;

解密就是把密文(收到的信息)再通过一系列的转换变成明文;

在这个过程当中,还需要一些数据来辅助加密,这样的数据叫做密钥(yuè)。

例如:

密文:这几天心情不是很好因为女朋友感情有了一点问题,真苦脑啊

密钥:加黑字体

明文:我心情很好,因为女朋友有了

3. 为什么要加密

image-20240316163035296

我们发起的网络请求,都是要通过中间人进行转发的,如果我们发送的请求是明文,且这个个中间人不靠谱(例如:商场免费的WIFI),那么中间人就可以拿到我们所有的数据,这是十分不安全的。

所以需要进行加密来对数据进行保护!

3. 常见的加密方式

3.1 对称加密

所谓的对称加密,即对明文加密和密文解密使用一个密钥,例如:

int main()
{
	int plaintext = 2024;
	int key = 999;
	int ciphertext = plaintext ^ key;
	int decode = ciphertext ^ key;
	cout << "明文: " << plaintext << endl;
	cout << "密钥: " << key << endl;
	cout << "密文: " << ciphertext << endl;
	cout << "解密: " << decode << endl;
}

对称加密的优势:

算法公开、计算量小、加密速度快、效率高

3.2 非对称加密

非对称加密:需要2个密钥来进行加密和解密,密钥a加密的数据可以通过密钥b进行解密;密钥b加密的数据也可以通过密钥a解密

一般2个密钥可以公开一个,这个公开的叫做公钥,另一个不公开的私钥。

用公钥加密,只能私钥解密

4. 数据指纹

数据指纹的基本原理是利用哈希函数对信息进行运算,生成固定长度的字符串(具有唯一性),这相当于数据的一个身份证

**场景1:**登录网站用户名+密码在这个网站上是唯一的,但是不能将这个数据直接写给用户,此时就能通过哈希运算形成一个数据指纹,这就是cookie

场景2:

百度网盘秒传原理

image-20240316175016622

5. https工作过程

5.1 加密方案

方案一:只使用对称加密

服务器是给客户端提供服务,客户端必须要有密钥,但是服务器和客户端的对应关系是1:n的,如果采用相同的密钥,那么在庞大的客户端当中,就可能有黑客拿到密钥

image-20240316181158084

方案二:只使用非对称加密

image-20240316181322185

方案三:双方使用非对称加密

image-20240316182351726

非对称加密的劣势就是效率较低,都使用非对称加密,那效率就更低了

方案四:非对称+对称加密

image-20240316184253727

协商阶段采用非对称,之后都是采用对称

这种方案看似很安全,效率也较高,解决了上面这几种方案的不足,但它就真的安全了吗???

MITM攻击(Man-in-the-MiddleAttack):

image-20240316191058670

5.2 引入证书

上面的中间人攻击的问题就是,无法鉴别服务端发来是公钥是否合法

CA认证:

我们国家的公民都是有身份证的,这个身份证不是由家庭、学校、工作单位制作,而是由政府登记(具有权威性)制作。

对于https,在使用之前需要向权威机构——CA机构申领一份数字证书(数字签名),证书里面包含证书申请者信息、公钥信息等。

服务器将证书传给浏览器,浏览器从证书里面读取公钥即可。

申请证书流程:

image-20240316201405669

在线生成.csr文件:CSR在线生成工具

如何理解证书是否会被替换?

CA机构内部会有公钥和私钥,先将用户的数据通过散列函数形成固定长度字符串,然后通过自己的私钥加密这个散列字符串。

在服务器内部会内置很多权威机构的公钥,然后用这些公钥来解密即可检查证书是否可信,如果解密成功,就代表这这个证书一定是CA机构颁发的,反之不是。

image-20240316203919073

方案五:非对称+对称加密+证书认证

image-20240316204934906

中间人是否可以篡改证书?

  • 中间人篡改证书的明文,但由于没有CA机构的私钥,所以无法哈希之后使用私钥形成签名,那么就没办法对篡改后的证书进行签名
  • 如果强行篡改,客户端收到之后对明文和签名解密,发现数据摘要不一致,则表面证书不可信,会终止向服务器发信息

中间人掉包整个证书

如果中间人将整个证书掉包,又要没有CA的私钥,只有用自己申请的真证书,但是证书的明文里面包含了要访问的域名和一些认证信息,这就相当于名牌打了,客户端会识别出来,如果是恶意行为,👮‍叔叔可能会根据信息找到个人/组织

为什么签名不直接加密,而要先采用hash形成摘要?

主要是为了缩小密文的长度,然后加快数字签名的验证签名运算速度

5.3 完整流程

image-20240316211426215

  • 14
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加法器+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值