
前言:本文将从HTTP的隐患出发,深入剖析HTTPS如何通过加密算法、数字证书与信任链机制重塑网络通信的安全边界。我们将探讨协议的证书颁发机构(CA)的信任逻辑,以及HTTPS在性能与安全之间的平衡艺术。将帮助您更从容地应对网络威胁,在数字化浪潮中守护每一份数据的价值。
HTTP的三大安全隐患
① 明文传输(无加密)
在网页中使用GET请求方法上传登录信息时账号和密码是显露在外面的,如下:

或者抓包后使用Fiddler获取协议报文同样能获取到登录信息,如下抓取到的GET请求方法的报文:

抓取到的POST请求报文:

② 无身份验证
③ 数据易篡改
https协议在应用层和传输层之间加一个对数据加密,解密的功能,实际上属于应用层。即TLS,SSL。TLS(传输层安全协议)和 SSL(安全套接层)是用于保护网络通信安全的加密协议。它们通过在客户端(如浏览器)和服务器之间建立加密连接,确保传输的数据不被窃听或篡改。
为什么能对数据窃取或篡改:
在客户端与服务器进行通信时要先经过运营商(中间人),所以数据是暴露在外面的。除此之外还会被黑客恶意攻击。

1.明文
2.密文
U2FsdGVkX1+2Z1z7Vp6N8g==。
3.密钥
什么是密钥?
与密码的区别:密码是用户自定义的字符串(如 P@ssw0rd123),用于身份验证。安全性较低(易被猜测或暴力破解),通常需通过算法(如 PBKDF2)转换为密钥。
密钥怎么使用?
密钥类型:
这部分涉及密码学和数学,我们不做更细节的探讨。像类似加密解密的操作并不是互联网特有的,而是生活中普遍存在的。
举一个不恰当的例子,如:a = 10,b=20,temp = a^b
其中
a:数据
b:密钥
temp:密文
^:加密算法
加密与解密:
加密:temp = a^b
解密:a = temp^b特点:密钥相同,速度快效率高,算法公开。
非对称加密:两个密钥公开和私有,即公钥和私钥,可以是公钥加密 私钥解密,或反过来,私钥加密 公钥解密。
场景:邮局提供两种钥匙:
特点:算法复杂,效率低。
数据指纹,其基本原理是利用单向散列函数(Hash 函数)对信息进行运算,生成一串固定⻓度的数字摘要。 数字指纹并不是一种加密机制,因为它是不可逆的,无法进行解密(也无需解密),它的意义在于可以用来判断数据有没有被篡改。如果数据被篡改过,尽管只是有一点点的改动,数据摘要都大有不同。
数据摘要具有唯一性,和人的指纹一样,所以也叫数据指纹。
数据通过哈希算法生成的散列值就是数据摘要,在将数据摘要进行加密就是数据签名,关于数据签名的使用在下文详细讲解。

应用场景1:百度秒传

应用场景2:数据库对私有信息的保护

说明:
server通常就只有一个,而client可以有很多,各个客户端就需要有独立的密钥,也就是每连接一个客户端,就要新生成一个密钥。那么服务器怎么得知客户端生成的密钥呢?
通过网络传输吗?那么怎么保证密钥传输的安全呢?进行加密?
这已经变成一个鸡生蛋,蛋生鸡的问题了,没有可行性(首次无法同步密钥)。我们来看方案二。

server把公钥给client,给黑客获取也没关系,因为它并不知道私钥,client用公钥生成密文,服务器用私钥解密。
貌似可以解决数据安全问题,但依旧有问题。
如下图解:

双方都有各自的公钥和私钥,用对方的公钥加密,用自己的私钥解密。
首次交互,需要进行公钥交换。

貌似可行,同样的有两个问题:
通过非对称密钥进行密钥协商生成对称密钥,然后使用对称密钥进行加密和解密,主要解决通信效率问题。
原理:client请求到server的公钥s,client生成自己的对称密钥x,再用公钥s对密钥x加密,传输给server,server用私钥s'解密得到密钥x,此后双方使用对称密钥x进行通信。

该方案比前三者好多了,看似无懈可击,其实还有问题,要知道道高一尺魔高一丈,我们继续往下看。
对于方案四,客户端与服务器首次通信时要完成公钥协商,生成对称密钥,此后都使用对称密钥,对称密钥不会在网络中传输。所以黑客只有这一次机会。
如何攻破?其实很简单,黑客只需要在传输公钥时进行调包即可,如下:

黑客为了不被发现,并且为了让客户端与服务器能正常通信,窃取到密钥x后他会再使用密钥s进行加密发送给服务器。黑客悄无声息的拿到了密钥,没人能察觉。
既然方案4能被攻破,那么方案1,2,3就更不用说了,不攻自破。
主要问题:client无法辨别公钥是否合法,它只管一个劲的接收。
接下来对方案四进行改进,主要解决如何让client得知自己收到的“公钥”是否合法的问题。
client判断“公钥”是否合法实际上就是判断数据是否被篡改过,不知道大家是否熟悉数据篡改这个词。上文所讲的数据指纹就是来验证数据是否被篡改的,已经做好了铺垫。
假设签名者:公钥Q,私钥Q'。这里暂且不考虑签名者是谁,要注意的是这里的公钥和私钥是单独新引入的,不要与客户端和服务器的密钥混淆。
最后把原始数据和签名拼在一起。发给客户端。

公钥Q所以人都知道,是彻底公开的,内置在客户端中。而公钥Q'是受严格保护的签名者持有。这是一种权利,其他人只认Q,对签名者绝对的信任。
现在模拟一下黑客攻击:
数据签名是传输在网络中的,黑客获取到数据签名后如果对数据篡改,客户端能校验出来。那么黑客把整个签名改了呢?即把篡改的数据重新生成签名。
不好意思客户端只认Q,用自己内置的公钥Q去解密。而黑客并不知道Q',无法生成对应的签名。
签名者称为CA机构,CA机构是互联网信任体系的基石,通过签发和管理数字证书,确保网络实体(如网站、设备)的身份可信和通信安全。
此后在密钥协商时client得到的不仅仅是一个签名,而是一个server的证书。而证书是由开发者向CA机构申请得到的。
除了签名,证书内还包含了公钥,域名等明文信息。如下:

证书就如身份证, 证明服务端公钥的权威性。

数字证书保证了公钥合法性,浏览器(客户端),一般都要内置可信的CA机构或着授权的子机构的公钥。

实际上签名时不进行数据摘要,直接对数据加密也是可行的。为什么不直接加密, 而是要先 hash 形成摘要?
总结:
HTTPS 工作过程中涉及密钥有三组:
非常感谢您能耐心读完这篇文章。倘若您从中有所收获,还望多多支持呀!