▧▧ 理解 https 前需要了解的前置知识
对称加密: 指的是加密和解密,都是使用同一个密钥,优点是速度快、效率高。缺点是接收方和发送方任一方密钥被泄露都会让加密信息不安全,不适合在互联网上传输密钥,密钥维护的工作量大
非对称加密:指的是密钥对的形式,分为公钥和私钥。使用公钥加密的信息只能用私钥解密,反过来使用私钥加密的信息也只能用公钥解密。优点是公钥与私钥无法互推,适合在互联网上传输公钥。用户密钥维护量少,每个用户只需要一个非对称密钥对。缺点是加密效率低
两种加密方式配合使用: 使用对称密钥加密信息内容,然后用私钥加密对称密钥,用户拿到信息内容后用公钥解密对称密钥,再用对称密钥解密消息内容。通过两种加密方式的套用,抵消了各自的缺点
加密安全:
- 加密方式无关安全强度,决定安全强度的是密钥的长度
- 解密成本也是安全强度的一种,当解密成本大于解密后的收益,也是安全性强的体现
- 密码有效期小于最快的破解时间也是密码强度的体现
相当于指纹,一种用于确保数字信息完整性、认证身份和防止否认的技术手段。如:根据散列函数对消息体生成一个 256 位的摘要 A(如 HS256),然后使用私钥对该摘要进行加密生成数字签名。用户收到消息后用公钥解密得到摘要 A,然后根据同样散列函数对消息体生成一个摘要 B,通过对比两个摘要,确认消息体是否被篡改。
.▧▧ 引用下 pity 里的一个函数,这里使用 JWT 提供了一种轻量级的方式来实现数字签名的功能,用于确保 token 的完整性和真实性,本质和数字签名的思想类似,但是 JWT 用的是对称密钥。
- 在创建 token 时,将数据和密钥输入到散列函数(如 HS256)中,生成一个固定长度的哈希值(签名)
- 在解析 token 时,按 . 分割,提取出头部、载荷和签名部分,将头部和载荷数据进行 Base64 解码,得到原始的 JSON 数据,使用相同的密钥和算法对原始的 JSON 数据进行签名,得到一个新的签名值,将新计算得到的签名值与从 JWT 中提取的签名部分进行比对,如果两者相同,则表示 JWT 是有效的;否则,表示 JWT 已被篡改或无效
- 另外 ExpiredSignatureError 只返回时间过期的报错,还有无效 token 的情况没有分类出来,需要加上 ” except InvalidTokenError“
数字签名这里虽然可以防止消息是否被篡改,但是有个关键点,就是无法保证公钥是否被替换过或者公钥是否属于当前请求的服务器
数字证书是什么
▧▧ 类似身份证是由公安机关签发的一样,主要作用是用于验证网络通信中的身份和信息的真实性。数字证书最核心的作用就是第三方权威机构证明这个公钥持有者是属于谁的
数字证书的应用
▧▧ http 是明文传输协议,数据传输过程中是以纯文本的形式进行传输。这里的明文指的是未经过加密的数据,这些未经过加密的 http 报文(请求行、请求头、主体)在网络上传输的过程,使得其内容容易被窃听者截取和读取。
▧▧ 背景: SSL 最初由网景公司 (Netscape) 开发,用于保护网络通信中的隐私、身份验证和数据完整性。SSL 的安全性存在一些漏洞和弱点,经过多次迭代增强安全性,在 1999 年更新为 TLS。由于 SSL 的最终版本(3.0)与 TLS 的第一版本之间并无明显差异,且这两个术语经常互换使用并混为一谈,现在仍然有人使用 SSL 来指代 TLS,或者使用术语 “SSL/TLS ”,所以 SSL 证书(技术上也称为 “TLS 证书”)。
从上图知道,SSL 层夹在应用层和传输层中间,主要分为两层
▧▧ 信息安全的基本要素:保密性、完整性、可用性、可控性、不可否认性。很明显 http 协议不具有信息安全的要素特征,因此使用 http + ssl 来保证 http 协议传输的安全性,http 是第一个使用 SSL 保证安全性的应用层协议
给 pity 加下证书,
用 postman 发起登录请求,用 wireshark 抓包
在进行 HTTPS 请求时,客户端会在 SSL/TLS 握手过程中获取服务器的公钥和数字证书。SSL/TSL 是一种用于保护通信安全的协议,它在建立安全连接时使用了公钥加密技术。TLS 握手包括以下步骤:
1.客户端发送 ClientHello 消息:客户端向服务器发送一个包含支持的 TLS 版本、加密算法和其他相关信息的 ClientHello 消息。
2.服务器发送 ServerHello 消息:服务器从客户端的支持列表中选择一个 TLS 版本、加密算法等,并将其作为 ServerHello 消息的一部分发送回客户端。
3.服务器发送数字证书:服务器会将其数字证书发送给客户端。数字证书中包含了服务器的公钥以及其他身份验证信息,比如服务器的域名等。
4.验证数字证书:客户端会验证服务器发送的数字证书,确保其合法性。这个过程包括检查数字证书的签发者、有效期、域名等信息,并验证证书链的完整性。
5.生成对称密钥:客户端会生成一个对称密钥,并使用服务器的公钥加密后发送给服务器,以便服务器之后能够使用私钥解密。
6.握手完成:TLS 握手完成后,客户端和服务器就可以使用对称密钥进行加密通信了。
原理:基于代理服务器和中间人攻击
以 Fiddler 为例,Fiddler 在计算机上安装了自己的根证书(Fiddler Root Certificate),然后将这个根证书当做受信任的证书。当用户通过 Fiddler 代理访问 HTTPS 网站时,Fiddler 将使用自己的根证书替代原始网站的 SSL 证书,建立一个与用户计算机之间的加密通道。大致流程如下:
大致的流程图
Https 在建立 Socket 连接之前,需要进行 SSL/TSL 握手,这里的握手分为单向和双向,后面有缘再进行补充了
另外这里的 markdown 真的难用,上下文直接的分隔间距太短了,编排也贼难受