关于密码学
现代密码学是用来处理数字和字符串的 早期西方的密码学加密方式很简单,例如移位替换法(ABC移位2位=>也就是说真实的密文为CDE) 而东方流行暗语(例如天王盖地虎🤣)
散列(例如sha256)是一种数据一旦转换为其他形式将永远无法恢复的加密技术,也就是说并不是严格意义上的加密算法。
用户在输入密码后通过加密算法把加密后的密码存放在DB中:
加密算法
- 对称加密(AES、DES、3DES) :从明文通过加密算法转化为密文,然后密文通过同一套加密算法解密为明文,这样的加密称之为对称加密
- 非对称加密(RSA):产生一个公钥(用于加密)和一个私钥(用于解密),这样的方式为非对称加密,更加安全
即使公钥也需要在传输的时候加上一些安全措施,即密匙交换算法
Hellman算法是一种著名的密钥协商算法,这种算法可以使得信息交换的双方通过公开的非安全的网络协商生成安全的共享密钥。
- Alice与Bob确定两个大质数n和g,这两个数不用保密
- Alice选择另一个大随机数x,并计算A如下:A=gx mod n
- Alice将A发给Bob
- Bob选择另一个大随机数y,并计算B如下:B=gy mod n
- Bob将B发给Alice
- 计算秘密密钥K1如下:K1=Bx mod n
- 计算秘密密钥K2如下:K2=Ay mod n, K1=K2,因此Alice和Bob可以用其进行加解密
SSL/TLS协议
传输层安全性协议(Transport Layer Security - TLS),及其前身安全套接层(Secure Sockets Layer - SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。
HTTPS协议的安全性由SSL协议实现,当前使用的TLS协议 1.2 版本包含了四个核心子协议:握手协议、密钥配置切换协议、应用数据协议及报警协议。
HTTPS协议、SSL协议、TLS协议、握手协议的关系
- HTTPS是Hypertext Transfer Protocol over Secure Socket Layer的缩写,即HTTP over SSL,可理解为基于SSL的HTTP协议。HTTPS协议安全是由SSL协议实现的。
- SSL协议是一种记录协议,扩展性良好,可以很方便的添加子协议
- 握手协议是SSL协议的一个子协议。
- TLS协议是SSL协议的后续版本,本文中涉及的SSL协议默认是TLS协议1.2版本。
TLS 握手的步骤
- ClientHello:客户端发送所支持的 SSL/TLS 最高协议版本号和所支持的加密算法集合及压缩方法集合等信息给 服务器端。
- ServerHello:服务器端收到客户端信息后,选定双方都能够支持的 SSL/TLS 协议版本和加密方法及压缩方法, 返回给客户端。
- SendCertificate(可选):服务器端发送服务端证书给客户端。
- RequestCertificate(可选):如果选择双向验证,服务器端向客户端请求客户端证书。
- ServerHelloDone:服务器端通知客户端初始协商结束。
- ResponseCertificate(可选):如果选择双向验证,客户端向服务器端发送客户端证书。
- ClientKeyExchange:客户端使用服务器端的公钥,对客户端公钥和密钥种子进行加密,再发送给服务器端。
- CertificateVerify(可选):如果选择双向验证,客户端用本地私钥生成数字签名,并发送给服务器端,让其通 过收到的客户端公钥进行身份验证。
- CreateSecretKey:通讯双方基于密钥种子等信息生成通讯密钥。
- ChangeCipherSpec:客户端通知服务器端已将通讯方式切换到加密模式。
- Finished:客户端做好加密通讯的准备。
- ChangeCipherSpec:服务器端通知客户端已将通讯方式切换到加密模式。
- Finished:服务器做好加密通讯的准备。
- Encrypted/DecryptedData:双方使用客户端密钥,通过对称加密算法对通讯内容进行加密。
- ClosedConnection:通讯结束后,任何一方发出断开 SSL 连接的消息。
HTTP 2协议分析
HTTP没有变动HTTP协议的核心概念(HTTP 方法、状态代码、URI 和标头字段等)
- 使用二进制格式传输,更高效、更紧凑。
- 对报头压缩,降低开销。
- 多路复用,一个网络连接实现并行请求。
- 服务器主动推送,减少请求的延迟。
- 默认使用加密。
HTTP 2:二进制分帧层
HTTP/2 所有性能增强的核心在于新的二进制分帧层,它定义了如何封装 HTTP 消息并在客户端与服务器之间传输。 HTTP/1.x 协议以换行符作为纯文本的分隔符,而 HTTP/2 将所有传输的信息分割为更小的消息和帧(头帧HEADERS frame和数据帧DATA frame),并采用二进制格式对它们编码。
HTTP 2:多路复用
HTTP 2:服务器推送
服务器可以对一个客户端请求发送多个响应。换句话说,除了对最初请求的响应外,服务器还可以向客户端推送额外资源,而无需客户端明确地请求(例如:在http1.1中去请求index.html,需要解析完成之后再去请求js和css)
HTTP 3
HTTP3其实并不是HTTP的标准版本,HTTP3是谷歌出版运行在 QUIC 之上的 HTTP 协议,它是一个全新的web协议,并不是对HTTP2的拓展。
QUIC 协议(Quick UDP Internet Connection)基于 UDP,正是看中了 UDP 的速度与效率。同时 QUIC 也整合了 TCP、TLS 和 HTTP/2 的优点,并加以优化。
队首阻塞问题
HTTP/2 的多路复用虽然可以解决“请求”这个粒度的阻塞,但 HTTP/2 的基础 TCP 协议本身却也存在着队头阻塞的问题。 QUIC解决队头阻塞问题的的方法:
http3几乎可以完全解决队头阻塞问题, QUIC 的传输单元是 Packet,加密单元也是 Packet,整个加密、 传输、解密都基于 Packet,这样就能避免 TLS 的队头阻塞问题;
QUIC 基于 UDP,UDP 的数据包在接收端没有处理顺序,即使中间 丢失一个包,也不会阻塞整条连接,其他的资源会被正常处理
http与反向代理
首先要需要了解什么是正向代理,正向代理是指一个位于客户端和原始服务器(origin server)之间的服务器(出口处),为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
反向代理
代理服务器位于局域网的入口处(可理解正向代理的局域网位于个人区域,反向代理的局域网位于机房),其实本质就是给服务器做代理。
反向代理的作用是 加密和SSL加速 负载均衡 缓存静态内容 压缩 减速上传 安全 外网发布。