💻 Computer Basics
1、计算机网络
1.1 传输层:TCP和UDP
1.1.1 三次握手
1.1.2 四次挥手
1.1.3 流量控制
1.1.4 拥塞控制
1.1.5 TCP和UDP的区别
1.1.6 TCP如何保证传输的可靠性
1.1.7 TCP长连接和短连接
1.1.8 应用层提高UDP协议可靠性的方法
1.1.9 UDP和IP的首部结构
1.2 应用层:HTTP和HTTPS
1.2.1 HTTP和HTTPS的区别
1.2.2 GET和POST的区别
1.2.3 Session与Cookie的区别
1.2.4 从输入网址到获得页面的过程(越详细越好)
1.2.5 HTTP请求有哪些常见的状态码
1.2.6 什么是RIP,算法是什么
1.2.7 HTTP1.1和HTTP2.0的主要区别
1.2.8 DNS
1.2.9 HTTPS加密和认证过程
1.2.10 常见网络攻击
1.2.11 REST
1.3 计算机网络体系结构
1.4 网络层协议
1.4.1 IP地址的分类
1.4.2 划分子网
1.4.3 什么是ARP协议
1.4.4 NAT协议
2、操作系统
2.1 进程和线程
2.1.1 进程和线程的区别
2.1.2 进程间通信方式
2.1.3 同步原语
2.1.4 进程状态
2.1.5 进程调度策略
2.1.6 僵尸进程和孤儿进程
2.1.7 协程
2.1.8 异常控制流
2.1.9 IO多路复用
2.1.10 用户态和内核态
2.2 死锁
2.3 内存管理
2.3.1 分段与分页
2.3.2 虚拟内存
2.3.3 页面置换算法
2.3.4 局部性原理
2.3.5 缓冲区溢出
2.4 磁盘调度
-
+
游客
注册
登录
HTTPS加密和认证过程
## 1 为什么要加密 1. 因为**HTTP 的内容是明文传输的**,**明文数据会经过中间代理服务器**、**路由器**、**WIFI 热点**、**通信服务运行商等多个物理节点**。 2. **如果信息在传输过程中被劫持**,**传输的内容就完全暴露了**,同时**劫持者还可以篡改传输的信息切不被对方察觉**,这就是**中间人攻击**。 3. 所以我们才**需要对信息进行加密**。 ## 2 常见的加密算法 常见的加密算法可以分成三类,分别是**对称加密算法**、**非对称加密算法**和**Hash 算法**。 ### 2.1 对称加密算法 #### 2.1.1 含义 ![](/media/202107/2021-07-18_1633550.6908485824092054.png "对称加密算法(来源:知乎 @顾伊凡 YGY)") 1. 对称加密算法指**加密和解密使用相同密钥的加密算法**,简单说就是**有一个密钥**,**他可以加密一段信息**,**也可以对加密后的信息进行解密**,**和我们日常生活中用的钥匙作用差不多**。 2. 对称加密的优缺点为: 1. 优点: 1. **加解密的效率高**、**加密速度快**。 2. 缺点: 1. **对于密钥的管理和分发上比较困难**,**不是非常安全**,**密钥管理负担很重**。 #### 2.1.2 常用算法 常用的对称加密算法包括**DES**、**3DES**、**AES**、**DESX**、**Blowfish**、**RC4**、**RC5**、**RC6**,下面以 DES、3DES、AES 为例进行简单介绍: 1. **DES**(Data Encryption Standard):**数据加密标准**,**速度较快**,**适用于加密大量数据的场合**。 2. **3DES**(Triple DES):**基于 DES**,**对一块数据采用三个不同的密钥进行三次加密**,**强度更高**。 3. **AES**(Advanced Encryption Standard):**高级加密标准**,是**下一代的加密算法标准**,**速度快**、**安全级别高**。 #### 2.1.3 对称加密用于 HTTPS 连接是否可行 1. **如果通信双方都各自持有同一个密钥**,**且没有别人知道**,**这两方的通信安全当然是可以保证的**。 2. 然而最大的问题就是**这个密钥怎么让传输的双方都知晓**,**同时不被别人知道**,如果由服务器生成一个密钥并传输给浏览器,那么在这个传输过程中密钥被别人劫持到手了怎么办,因为之后他就能用密钥解开双方传输的任何内容,所以这么做当然不行。 3. 换种思路,试想一下,如果**浏览器内部就预存了网站 A 的密钥**,**且可以确保除了浏览器和网站 A**,**不会有任何外人知道该密钥**,那理论上用对称加密是可以的,这样浏览器只要预存好世界上所有 HTTPS 网站的密钥就行了,这么做显然不现实,所以我们就需要[非对称加密](#2-2-非对称加密算法)。 ### 2.2 非对称加密算法 #### 2.2.1 含义 ![](/media/202107/2021-07-18_1646040.7706738194035753.png "非对称加密算法(来源:(来源:知乎 @顾伊凡 YGY))") 1. 非对称加密指**加**、**解密使用不同的密钥**,**一把作为公开的公钥**,**另一把作为私钥**,**公钥加密的信息**,**只有私钥才能解密**,反之,**私钥加密的信息**,**只有公钥才能解密**。 2. 非对称加密的优缺点为: 1. 优点: 1. **安全性更高**,**公钥是公开的**,**私钥是自己保存的**,**不需要将私钥给别人**。 2. 缺点: 1. **加密和解密花费时间长**、**速度慢**,**只适合对少量数据进行加密**。 #### 2.2.2 常用算法 常用的非对称加密算法包括**RSA**、**DSA**(数字签名用)、**ECC**、**Diffile-Hellman**、**EI Gamal**,下面以 RSA、DSA 为例进行简单介绍: 1. **RSA**:由 RSA 公司发明,**是一个支持变长密钥的公共密钥算法**,**需要加密的文件块的长度也是可变的**。 2. **DSA**(Digital Signature Algorithm):**数字签名算法**,是一种标准的数字签名标准。 #### 2.2.3 非对称加密用于 HTTPS 连接是否可行 1. 鉴于非对称加密的机制,我们可能会有这种思路,**服务器先把公钥以明文方式传输给浏览器**,**之后浏览器向服务器传输数据前都先用这个公钥加密后再传**,**这条数据的安全似乎可以保障了**,因为**只有服务器有相应的私钥能解开公钥加密的数据**。 2. 然后反过来**由服务器到浏览器的这条路怎么保障安全呢**,如果**服务器用他的私钥加密数据传给浏览器**,那么**浏览器用公钥可以解密他**,而**这个公钥一开始通过明文传输给浏览器的**,**若这个公钥被中间人劫持到了**,**那他也能用公钥解密服务器传来的信息了**,所以**目前似乎只能保证由浏览器向服务器传输数据的安全性**(其实仍有漏洞,下文会说)。 #### 2.2.4 改良的非对称加密方案,似乎可以 1. 我们已经理解**通过一组公钥私钥**,**可以保证单个方向传输的安全性**,那用两组公钥私钥,是否就能保证双向传输都安全了,我们可以看一下下面的过程: 1. 某网站**服务器拥有公钥 A 与对应的私钥 A'**,**浏览器拥有公钥 B 与对应的私钥 B'**。 2. **浏览器把公钥 B 明文传输给服务器**。 3. **服务器把公钥明文传输给浏览器**。 4. 之后**浏览器向服务器传输的内容都用公钥 A 加密**,**服务器收到后用私钥 A'解密**,由于**只有服务器拥有私钥 A'**,所以**能保证这条数据的安全**。 5. 同理,**服务器向浏览器传输的内容都用公钥 B 加密**,**浏览器收到后用私钥 B'解密**,同时也**可以保证这条数据的安全**。 2. **的确可以**,**抛开这里面仍有的漏洞不谈**(下文会讲),**HTTPS 的加密却没有使用这种方案**,很重要的原因是**非对称加密算法非常耗时**,而**对称加密快很多**,因此我们**能不能运用非对称加密的特性解决前面提到的对称加密的漏洞呢**。 #### 2.2.5 非对称加密 + 对称加密 1. 既然非对称加密耗时,那非对称加密 + 对称加密结合可以吗,而且得**尽量减少非对称加密的次数**,当然是可以的,且**非对称加密**、**解密各只需用一次即可**。 2. 具体的过程如下: 1. 某网站**服务器拥有非对称加密的公钥 A**、**私钥 A'**。 2. **浏览器向网站服务器请求**,**服务器把公钥 A 明文传输给浏览器**。 3. **浏览器随机生成一个用于对称加密的密钥 X**,**用公钥 A 加密后传输给服务器**。 4. **服务器拿到后用私钥 A'解密得到密钥 X**。 5. **这样双方就都拥有密钥 X 了**,且**别人无法知道他**,之后**双方所有数据都通过密钥 X 加密解密即可**。 3. **HTTPS 基本就是采用这种方案的**,但是会存在[中间人攻击](https://notebook.ricear.com/project-26/doc-798/#3-%E4%B8%AD%E9%97%B4%E4%BA%BA%E6%94%BB%E5%87%BB)。 ### 2.3 Hash 算法 #### 2.3.1 含义 1. Hash 算法的特别之处在于他**是一种单向算法**,**用户可以通过 Hash 算法对目标信息生成一段特定长度的惟一的 Hash 值**,**却不能通过这个 Hash 值重新获得目标信息**,因此 Hash 算法**常用在不可还原的密码存储**、**信息完整性校验等**。 #### 2.3.2 常用算法 常用的 Hash 算法包括**MD5**、**SHA**、**SHA1**、**SHA2**、**SHA-256**、**HMAC**、**HMAC-MD5**、**HMAC-SHA1**,下面以 MD5、SHA-256 为例进行简单介绍: 1. **MD5**(Message-Digest Algorithm):一种被广泛使用的密码散列函数,**可以产生出一个 128 位**(16 字节)**的散列值**,**用于确保信息传输完整一致**,缺点是**随着计算机运算能力的提高**,**有可能找到碰撞**,因此,**在安全要求高的场合不使用 MD5**。 2. **SHA-256**(Secure Hash Algorithm 256):**是 SHA-2 细分出来的一种算法**,**可以产生出一个 256 位**(32 字节)**的散列值**,**安全性比 MD5 要高**。 ## 3 加密算法的选择 1. 由于**非对称加密算法的运行速度比对称加密算法速度慢很多**,当我们**需要加密大量的数据时**,**建议采用对称加密算法**,**提高加解密速度**。 2. 由于**对称加密算法的密钥管理是一个复杂的过程**,**迷药的管理直接决定它的安全性**,因此**当数据量很小时**,我们**可以考虑采用非对称加密算法**。 3. **对称加密算法不能实现签名**,因此**签名只能使用非对称加密算法**。 4. 在实际的操作过程中,通常采用的方式是**采用非对称加密算法管理对称加密算法的密钥**,然后**用对称加密算法加密数据**,这样我们就**集成了两类加密算法的优点**,**即实现了加密速度快的优点**,**又实现了安全方便管理密钥的优点**。 ## 4 HTTPS连接过程 1. **客户端发送Client Hello给服务端**,包含以下信息: 1. **支持的TLS版本**。 2. **支持的加密方式**。 3. **随机数 `random_C`**。 4. **域名**。 2. **服务端收到请求后**,**发送Server Hello**,包含以下信息: 1. **确定TLS版本**。 2. **随机数 `random_S`**。 3. **确定加密方式**。 4. [**数字证书**](https://notebook.ricear.com/project-26/doc-798/#3-2-1-%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6): 1. **内容**(域名、公钥、有效期等) 2. **签名**。 3. **客户端收到请求后**,将会做一下事情: 1. **验证证书**: 1. **操作系统和浏览器中存有CA机构的公钥**,**客户端使用CA机构的公钥对签名进行解密**,**解密成功说明证书由CA机构颁发**。 2. **签名成功解密后得到证书摘要**,**客户端使用Hash签名算法对证书内容进行摘要**,**然后和签名解密后的摘要比较**,**相等说明证书没有被修改过**,**证书内容可信**。 3. **客户端验证证书内容的域名和当前网址是否一致**,**证书是否过期**。 2. **生成随机数**: 1. **验证通过后**,**客户端生成随机数 `Pre-master`**,**然后用证书中的公钥进行加密**,**发送给服务端**。 4. **服务端**: 1. **服务端使用CA机构给的私钥对加密后的随机数进行解密**,**获取随机数 `Pre-master`**。 5. **客户端**/**服务端**: 1. **服务端和客户端分别用根据 `random_C`**、`b`**和 `Pre-master`生成密钥**,**用于加密传输数据**。 ## 参考文献 1. [彻底搞懂 HTTPS 的加密原理](https://zhuanlan.zhihu.com/p/43789231)。 2. [https 的认证加密过程](https://segmentfault.com/a/1190000038406039)。 3. [HTTPS 加密流程理解](https://www.shuzhiduo.com/A/1O5E3lxGz7)。 4. [一文读懂对称加密算法、非对称加密算法和 Hash 算法](https://www.chainnews.com/articles/222021126804.htm)。 5. [对称与非对称加密算法](https://blog.csdn.net/liudongdong19/article/details/82217431)。 6. [对称加密、非对称加密、RSA(总结)](https://juejin.cn/post/6844903584073515016)。 7. [加密算法原理分析(MD5、SHA-256)](https://juejin.cn/post/6844903850160160781)。
ricear
2021年7月20日 11:54
©
BY-NC-ND(4.0)
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码