HTTPS协议
https是什么
简单来说:相较于传统的http协议,https是http的升级版主要是在信息安全上有着很高的保障,'S'就是代表的secure,安全的意思。
在 HTTP 协议的基础上,增加了 SSL/TLS 握手过程。在建立连接时,客户端和服务器会进行一系列的交互,包括交换加密算法、生成会话密钥、验证证书等操作,以确保后续数据传输的安全性。之后的数据传输则使用加密后的 HTTP 消息。
加密与解密
所谓加密,简单来说就是将要发的信息(称之为明文),通过一定方法进行加密,变成暗文。
那么解密,就是将暗文变为明文。
加密方式
简单来说->
对称加密:只有一把密钥,这把钥匙用来加密和解密
非对称加密:有两把密钥非别为公钥和私钥,两把都可以用来加密和解密,但是当一把钥匙用来加密后就不能用来解密,只能有另一把钥匙解密。
对称加密
原理
对称加密使用相同的密钥进行加密和解密操作。发送方使用该密钥将明文数据转换为密文,接收方收到密文后,使用相同的密钥将密文还原为明文。常见的对称加密算法有 DES(Data Encryption Standard)、3DES、AES(Advanced Encryption Standard)等。
特点
- 加密和解密速度快:由于使用相同的密钥进行操作,算法相对简单,所以加密和解密的效率较高,适合对大量数据进行加密。
- 密钥管理困难:因为加密和解密使用同一密钥,所以密钥的分发和存储是一个难题。如果密钥在传输过程中被泄露,那么加密的信息就会变得不安全。
应用场景
- 数据存储加密:对本地文件或数据库中的数据进行加密,防止数据在存储介质中被非法获取。
- 大量数据传输:在一些对数据传输效率要求较高的场景中,如企业内部网络的数据传输,对称加密可以快速对数据进行加密和解密。
非对称加密
原理
非对称加密使用一对密钥,即公钥和私钥。公钥是公开的,任何人都可以使用公钥对数据进行加密;而私钥是保密的,只有密钥的所有者才能使用私钥对加密的数据进行解密。此外,私钥还可以用于生成数字签名,公钥用于验证数字签名。常见的非对称加密算法有 RSA、ECC(椭圆曲线加密算法)等。
特点
- 安全性高:由于公钥和私钥是成对出现且不能相互推导,即使公钥被公开,只要私钥不泄露,加密的信息就是安全的。同时,数字签名可以有效防止信息被篡改和伪造。
- 加密和解密速度慢:非对称加密算法的计算复杂度较高,所以加密和解密的速度相对较慢,不适合对大量数据进行加密。
应用场景
- 身份验证:在网络通信中,通过数字签名可以验证发送方的身份,确保信息的来源可靠。
- 密钥交换:在使用对称加密进行大量数据传输时,可以使用非对称加密来安全地交换对称加密的密钥,解决对称加密密钥管理困难的问题。
- 安全邮件:对邮件内容进行加密和签名,保证邮件的保密性和完整性。
数据摘要 && 数据指纹
数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash 函数)对信息进行运算,生成一串固定⻓度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。
• 摘要常见算法:有 MD5、SHA1、SHA256、SHA512 等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)
• 摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比
中间人
简单介绍一下,这就是一种网络攻击的方式!中间人干的事就是当数据发送时,数据在被路由时将数据篡改,窃取,伪造等,再将数据发送给另一段。看似是cs两端在通信,实则是有第三人。而中间人攻击主要是指篡改客户端接收到的密钥
HTTPS方案
前置了解,如果我们要让对方也用的什么密钥加的锁,在发送时之前需要将密钥也发送给对方。
只使用对称加密

这种加密方法中间人是非常好攻击的,交换密钥时就将密钥截取了,在后就可以进行攻击了。
只使用非对称加密
这与只使用对称密钥是一样的在密钥交换时会将一端的密钥截取
如果服务器先把公钥以明文方式传输给浏览器,之后浏览器向服务器传数据前都先用这个公钥加密好再传,从客户端到服务器信道似乎是安全的(有安全问题),因为只有服务器有相应的私钥能解开公钥加密的数据。
双方都使用密钥加密
这种加密方法更有漏洞
相比只使用非对称加密这种方法是两边的消息都能被攻击
非对称加密 + 对称加密
这种加密方法已经有点安全了,加密与解密已经变得有些复杂了,但是还是有安全问题!
这也意味着服务端的收到的公钥可能会被篡改吗?
CA 认证
服务端在使用 HTTPS 前,需要向 CA 机构申领一份数字证书,数字证书里含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明服务端公钥的权威性。
简单来说当使用https请求时会客户端给你一份证书,证书就包含了服务端的公钥,这个公钥就是再明文信息中的,但是想一想如果只是这样是不是中间人还是能得到你的公钥呢?那么这又是怎么保障证书的安全信的呢?
签名
首先证书中有签名,以及整个证书是由CA机构特有的私钥进行加密的。如果想要解析数据就要先拿到公钥,这个好说一般CA的公钥都是公开的,直接在各个浏览器中都有。
当浏览器拿到https请求到的证书时就会解析证书,证书中有一个签名。
签名:是一个用CA机构的私钥进行加密的散列值,这个散列值是由数据大小散列得来的。
验证:就是说的用公钥解密暗纹得到一个值与此时数据散列得来的值进行对比如果星等就说明数据没有被篡改过。
此时相等时就说明是一个有效证书!这个证书中的公钥就可信!
方案 5 - 非对称加密 + 对称加密 + 证书认证
在客户端和服务器刚一建⽴连接的时候, 服务器给客户端返回一个 证书,证书包含了
之前服务端的公钥, 也包含了网站的身份信息.
经过上述方法后再使用对称加密和非堆成加密进行通信
经过这样的方法中间人几乎是不可能调包可信的证书了,因为有加密散列hash的存在,当改变数据时一定会通过用公钥CA解开签名,当再次加密时就必须要CA的私钥了。这就让中间人无法通过修改证书来修改服务器发来的公钥了