文章目录
- 1. 什么是https
- 2. 什么是加密
- 3. 为什么要加密
- 3. 常见的加密方式
- 3.1 对称加密
- 3.2 非对称加密
- 4. 数据指纹
- 5. https工作过程
- 5.1 加密方案
- 5.2 引入证书
- 5.3 完整流程
1. 什么是https
网络协议栈当中,传输层和网络层是在操作系统内部,应用层的请求是交给了传输层,而操作系统不管对数据的加密,只负责如何进行数据传送问题。
在http
协议中,用户的请求、响应、提交参数这些用户信息都是在http
协议的请求当中,然后http
向下交付,此时如果中间有人要读取我们的信息,是能够直接拿到的,这是不安全的。
于是便有人在应用层添加了一层软件层:ssl
加密解密层,发送的请求通过加密再交付,那么在这个中间(操作系统、网络)就不知道传输的是什么数据,只有服务端和客户端的应用层才知道。
ssl
这种加密解密协议,都是外部标准组织规范的
以上就是https
协议,基于http
在应用层封装了一个软件层,http
的要发送的内容,先交给软件层加密,然后再发给操作系统。
层和层之间是解耦的,每层只需要知道要发送的是什么东西即可
是否有绝对安全的网络协议?
无论怎样的加密解密方式,随着时代的进步和算力的进步,总会发现漏洞,所以没有绝对安全的网络协议。
那该如何看待网络协议的安全呢?攻破的成本 > 攻破的收益
2. 什么是加密
加密就是把明文(所需传输的信息)通过一系列的转换变成密文;
解密就是把密文(收到的信息)再通过一系列的转换变成明文;
在这个过程当中,还需要一些数据来辅助加密,这样的数据叫做密钥(yuè)。
例如:
密文:我这几天心情不是很好,因为和女朋友感情有了一点问题,真苦脑啊
密钥:加黑字体
明文:我心情很好,因为女朋友有了
3. 为什么要加密
我们发起的网络请求,都是要通过中间人进行转发的,如果我们发送的请求是明文,且这个个中间人不靠谱(例如:商场免费的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:
百度网盘秒传原理
5. https工作过程
5.1 加密方案
方案一:只使用对称加密
服务器是给客户端提供服务,客户端必须要有密钥,但是服务器和客户端的对应关系是1:n
的,如果采用相同的密钥,那么在庞大的客户端当中,就可能有黑客拿到密钥
方案二:只使用非对称加密
方案三:双方使用非对称加密
非对称加密的劣势就是效率较低,都使用非对称加密,那效率就更低了
方案四:非对称+对称加密
协商阶段采用非对称,之后都是采用对称
这种方案看似很安全,效率也较高,解决了上面这几种方案的不足,但它就真的安全了吗???
MITM攻击(Man-in-the-MiddleAttack):
5.2 引入证书
上面的中间人攻击的问题就是,无法鉴别服务端发来是公钥是否合法
CA认证:
我们国家的公民都是有身份证的,这个身份证不是由家庭、学校、工作单位制作,而是由政府登记(具有权威性)制作。
对于https
,在使用之前需要向权威机构——CA机构申领一份数字证书(数字签名),证书里面包含证书申请者信息、公钥信息等。
服务器将证书传给浏览器,浏览器从证书里面读取公钥即可。
申请证书流程:
在线生成
.csr
文件:CSR在线生成工具如何理解证书是否会被替换?
CA机构内部会有公钥和私钥,先将用户的数据通过散列函数形成固定长度字符串,然后通过自己的私钥加密这个散列字符串。
在服务器内部会内置很多权威机构的公钥,然后用这些公钥来解密即可检查证书是否可信,如果解密成功,就代表这这个证书一定是CA机构颁发的,反之不是。
方案五:非对称+对称加密+证书认证
中间人是否可以篡改证书?
- 中间人篡改证书的明文,但由于没有CA机构的私钥,所以无法哈希之后使用私钥形成签名,那么就没办法对篡改后的证书进行签名
- 如果强行篡改,客户端收到之后对明文和签名解密,发现数据摘要不一致,则表面证书不可信,会终止向服务器发信息
中间人掉包整个证书
如果中间人将整个证书掉包,又要没有CA的私钥,只有用自己申请的真证书,但是证书的明文里面包含了要访问的域名和一些认证信息,这就相当于名牌打了,客户端会识别出来,如果是恶意行为,👮叔叔可能会根据信息找到个人/组织
为什么签名不直接加密,而要先采用hash形成摘要?
主要是为了缩小密文的长度,然后加快数字签名的验证签名运算速度