HTTPS、SSL/TLS 与网络通信学习笔记
一、核心概念总览
1. 什么是 HTTP?
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种应用层协议,用于客户端与服务器之间交换数据。
例如,浏览器向服务器请求网页:
1 | GET /index.html HTTP/1.1 |
服务器返回:
1 | HTTP/1.1 200 OK |
HTTP 本身不负责加密通信。如果直接使用普通 HTTP,传输内容可能被网络中的攻击者读取或篡改。
2. 什么是 HTTPS?
HTTPS(HTTP Secure)是通过 TLS 保护的 HTTP 通信。
可以简单理解为:
HTTPS = HTTP + TLS 安全保护
HTTPS 主要提供三个安全目标:
- 机密性:防止第三方直接读取通信内容。
- 完整性:防止通信数据被秘密篡改。
- 身份认证:帮助浏览器确认服务器的身份。
注意:HTTPS 不能保证网站本身一定可信,也不能保证网站不会泄露用户数据。
3. 什么是 SSL 和 TLS?
- SSL:Secure Sockets Layer,安全套接层。
- TLS:Transport Layer Security,传输层安全协议。
TLS 是 SSL 的后继者。
SSL 2.0、SSL 3.0 等旧版本已经不安全,不应使用。现代网站通常使用 TLS 1.2 或 TLS 1.3。
| 概念 | 作用 |
|---|---|
| SSL | 已淘汰的旧协议系列 |
| TLS 1.2 | 目前仍广泛使用的安全协议版本 |
| TLS 1.3 | 更现代的版本,简化握手并移除多种旧式机制 |
| SSL 证书 | 行业中常用的说法,通常指用于 HTTPS 的 TLS 证书 |
为什么现在还叫 SSL 证书?
因为这个名称已经被行业广泛使用。实际上,现代 HTTPS 使用的是 TLS,而不是旧版 SSL。
二、加密的基础知识
1. 明文与密文
- 明文:可以直接理解的数据。
- 密文:经过加密后,不应被未授权者直接理解的数据。
- 加密:通过算法和密钥,将明文转换成密文。
- 解密:通过相应算法和密钥,将密文恢复成明文。
例如:
1 | 明文:Hello World |
加密并不是简单地把文字换成另一串字符,而是依靠密码算法和密钥实现安全保护。
2. 对称加密
对称加密使用同一个密钥进行加密和解密。
1 | 明文 |
常见算法:
- AES
- ChaCha20
优点:
- 加解密速度快。
- 适合传输大量数据。
缺点:
- 通信双方必须安全地获得共享密钥。
- 如果密钥泄露,攻击者可能解密相关通信。
TLS 建立安全连接后,主要使用对称加密保护实际传输的数据。
3. 非对称加密
非对称密码技术使用一对数学上相关的密钥:
- 公钥(Public Key)
- 私钥(Private Key)
公钥可以公开,私钥必须受到保护。
非对称密码技术有不同用途:
公钥加密与私钥解密:
1 | 明文 |
这种方式可用于某些密钥传输场景,但不是现代 TLS 1.3 的常规密钥协商方式。
数字签名与验证:
1 | 发送方使用私钥签名 |
数字签名主要用于验证签名来源和数据完整性,不是为了隐藏内容。
常见的非对称密码算法包括 RSA、ECDSA 和 EdDSA。现代 TLS 还经常使用椭圆曲线 Diffie-Hellman 密钥交换。
4. 公钥和私钥的作用
| 名称 | 主要用途 | 是否公开 |
|---|---|---|
| 公钥 | 验证数字签名;在适用的方案中用于加密 | 可以公开 |
| 私钥 | 生成数字签名;在适用的方案中用于解密 | 必须保密 |
注意:公钥和私钥并不总是用于同一套操作。 数字签名与加密是不同的密码学功能。
5. 为什么 HTTPS 同时使用两类密码技术?
因为它们各有优势:
- 非对称密码技术:可以帮助完成身份认证和密钥协商。
- 对称加密:速度快,适合保护大量通信数据。
因此,TLS 通过身份认证和密钥协商建立安全连接,再使用协商得到的密钥保护 HTTP 数据。
三、数字证书与 CA
1. 什么是 TLS 证书?
TLS 证书是一种数字文件,用来将特定身份(例如域名)与公钥关联起来。
证书通常包含:
- 域名或其他身份信息。
- 服务器公钥。
- 证书有效期。
- 证书签发者信息。
- CA 的数字签名。
- 其他与证书用途和约束有关的信息。
可以把证书理解为网站的数字身份证明。
2. 什么是 CA?
CA(Certificate Authority,证书颁发机构)负责按照一定的验证规则签发数字证书。
例如,网站希望启用 HTTPS:
1 | 网站管理员 |
常见 CA 包括:
- Let’s Encrypt
- DigiCert
- Sectigo
- GlobalSign
其中 Let’s Encrypt 提供免费的域名验证型 TLS 证书。
3. CA 为什么值得浏览器信任?
操作系统或浏览器内置了一组受信任的根证书。
浏览器会检查服务器证书能否沿着有效的证书链,连接到受信任的根证书。
简化的证书链:
1 | 受信任的根 CA |
根 CA 通常通过根证书建立信任,中间 CA 再签发网站证书。
浏览器验证证书链中的签名和约束,并检查域名、有效期、用途等条件。
4. 什么是数字签名?
数字签名用于验证数据是否由对应私钥持有者签署,以及数据是否发生了未经授权的修改。
在证书场景中:
1 | CA 的私钥 |
如果证书内容被修改,原来的签名通常就无法通过验证。
注意:数字签名并不等于加密。证书内容一般是可以公开读取的。
5. 浏览器如何验证网站证书?
浏览器通常会检查:
- 域名是否匹配:证书是否覆盖正在访问的域名。
- 有效期是否正确:证书是否尚未生效或已经过期。
- 证书链是否可信:是否能够建立到受信任根 CA 的有效路径。
- 数字签名是否有效:相关签名能否通过验证。
- 用途和约束是否符合要求:例如证书是否适合服务器身份认证。
如果检查失败,浏览器可能显示证书警告。
证书验证通过,意味着浏览器能够在相应信任体系下认证服务器身份,并不意味着网站的业务内容绝对安全。
四、TLS 握手与会话密钥
1. 什么是 TLS 握手?
TLS 握手是客户端和服务器在安全通信开始时进行的协议交互。
主要目的包括:
- 协商 TLS 版本和密码套件。
- 进行密钥交换。
- 认证服务器身份。
- 派生后续加密通信使用的密钥。
2. TLS 1.3 握手的简化流程
1 | 客户端 服务器 |
这是便于理解的简化示意。实际消息内容和发送顺序可能因握手模式、证书验证方式等因素有所不同。
3. 各消息的作用
- ClientHello:客户端提供支持的 TLS 参数,并在常见握手中发送密钥交换相关信息。
- ServerHello:服务器选择相关参数,并提供自己的密钥交换信息。
- Certificate:服务器发送证书链。
- CertificateVerify:服务器使用相应私钥对握手上下文进行签名,证明自己持有对应私钥。
- Finished:验证握手过程的完整性,并确认相关握手密钥的持有情况。
4. ECDHE 是什么?
ECDHE 是一种基于椭圆曲线 Diffie-Hellman 的临时密钥交换机制。
在现代 TLS 中,客户端和服务器交换公开的密钥交换参数,然后各自计算出相同的共享秘密。
1 | 客户端 服务器 |
监听网络的攻击者即使看到公开交换信息,也不能仅凭这些信息轻易计算出共享秘密。
TLS 再利用共享秘密和握手数据派生出相应的加密密钥。
5. 服务器私钥到底负责什么?
在现代 TLS 1.3 的典型证书握手中:
- 服务器证书提供公钥及身份信息。
- 服务器私钥用于签署握手数据,证明对相应私钥的持有。
- ECDHE 等机制负责协商共享秘密。
- TLS 使用派生出的密钥保护后续通信。
因此,不能简单理解成“浏览器把会话密钥用服务器公钥加密,再发给服务器”。
那是对部分旧式密钥交换方式的描述,不是现代 TLS 1.3 的典型流程。
6. 什么是会话密钥?
会话密钥是 TLS 根据密钥交换结果和握手数据派生出来、用于保护通信的密钥材料。
它可以用于派生不同方向、不同用途的流量密钥。
实际通信时,TLS 通常使用 AES-GCM 或 ChaCha20-Poly1305 等认证加密算法保护数据。
这类算法不仅提供机密性,也能检测密文被篡改的情况。
五、一次真实 HTTPS 请求的完整流程
假设你在 Chrome 地址栏输入:
1 | https://example.com/index.html |
整个过程可以分成以下步骤。
第 1 步:浏览器解析 URL
URL 可以拆解为:
1 | https://example.com:443/index.html |
其中:
https:表示使用 HTTPS。example.com:目标域名。443:HTTPS 的默认端口。/index.html:请求的资源路径。
如果没有显式指定端口,浏览器通常使用 HTTPS 默认端口 443。
第 2 步:DNS 解析域名
浏览器需要知道目标域名对应的 IP 地址。
1 | example.com |
DNS 查询可能先命中浏览器或操作系统缓存;如果没有缓存答案,则可能向配置的递归 DNS 解析器查询。
递归解析器必要时会通过根 DNS、顶级域 DNS 和权威 DNS 等层次找到答案。
注意:DNS 不负责建立 HTTPS 连接,它主要负责将域名解析为相应的网络记录。
第 3 步:建立传输连接
在传统 HTTP/1.1、HTTP/2 over TLS 的常见场景中,浏览器会与服务器建立 TCP 连接。
例如:
1 | 客户端:192.168.1.100:52341 |
上面是示意地址和端口。
TCP 通过三次握手建立连接:
1 | 客户端 服务器 |
TCP 主要提供可靠、有序的字节流传输。
注意:HTTPS 并不总是使用 TCP。HTTP/3 使用 QUIC,而 QUIC 基于 UDP。
第 4 步:进行 TLS 握手
在 TCP 上运行 TLS 的场景中,TCP 连接建立后,客户端开始 TLS 握手。
双方协商协议参数、执行密钥交换,并完成必要的身份认证。
第 5 步:验证证书和服务器身份
浏览器检查证书的域名、有效期、证书链、数字签名及用途等信息。
服务器还会通过握手签名证明自己持有证书对应的私钥。
验证成功后,客户端可以确认当前连接的服务器身份符合预期的证书验证规则。
第 6 步:建立加密通信
双方从握手中派生出通信密钥,随后使用 TLS 记录层的保护机制传输数据。
1 | HTTP 数据 |
第 7 步:浏览器发送 HTTP 请求
例如:
1 | GET /index.html HTTP/1.1 |
实际请求还可能包含 Cookie、User-Agent、Accept-Encoding 等请求头。
在常规 HTTPS 连接中,这些 HTTP 内容由 TLS 保护后再传输。
第 8 步:服务器返回 HTTP 响应
例如:
1 | HTTP/1.1 200 OK |
响应正文可能是 HTML。
数据在网络上传输时由 TLS 保护,浏览器收到数据后进行解密和验证,再把 HTTP 响应交给浏览器的相关组件处理。
第 9 步:浏览器解析和渲染页面
浏览器解析 HTML,构建页面结构,并根据需要继续请求 CSS、JavaScript、图片等资源。
例如:
1 | <link rel="stylesheet" href="/style.css"> |
浏览器会根据页面内容发起后续请求,最终完成网页渲染。
完整流程图
1 | 输入 HTTPS URL |
六、IP、端口、TCP、UDP、路由器与 NAT
1. IP 地址是什么?
IP 地址用于标识 IP 网络中的网络接口,并让数据包能够被路由到目标网络。
例如:
1 | 192.168.1.100 |
IP 地址与域名不同:
- 域名:方便人类记忆的名称。
- IP 地址:网络层使用的地址。
域名通常通过 DNS 解析到 IP 地址,但一个域名可能对应多个 IP,一个 IP 也可能承载多个域名。
2. 端口是什么?
端口用于在一台主机上区分不同的传输层服务端点。
常见默认端口:
| 服务 | 默认端口 |
|---|---|
| HTTP | 80 |
| HTTPS | 443 |
| SSH | 22 |
| DNS | 53 |
| MySQL | 3306 |
| Redis | 6379 |
这些是常见默认值,不意味着每个服务都必须使用对应端口。
可以记住:
IP 地址帮助找到目标主机;端口帮助找到目标传输层服务。
3. 为什么客户端也有端口?
客户端连接服务器时,通常使用一个临时端口。
例如:
1 | 客户端 192.168.1.100:52341 |
其中:
- 客户端端口
52341:示例临时端口。 - 服务器端口
443:HTTPS 默认端口。
TCP 连接通常可以用以下四项来区分:
1 | 源 IP + 源端口 + 目标 IP + 目标端口 |
此外还需要考虑传输层协议,例如 TCP 或 UDP。
4. TCP 是什么?
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的传输层协议。
主要特点:
- 提供可靠、有序的字节流传输。
- 通过确认、重传等机制处理丢包。
- 使用流量控制和拥塞控制。
- 通过连接建立与关闭管理通信状态。
TCP 本身不负责加密,也不验证网站证书。
5. UDP 是什么?
UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议。
它不提供 TCP 那样的可靠、有序字节流保证。
UDP 开销较小,适合需要自行实现传输机制的协议。QUIC 就在 UDP 之上实现了连接管理、可靠传输、拥塞控制和 TLS 1.3 安全机制的集成。
6. 路由器是什么?
路由器负责在不同网络之间转发 IP 数据包。
在家用网络中:
1 | 电脑 |
路由器可能同时提供 Wi-Fi、DHCP、NAT 和防火墙等功能,但这些功能并不是路由本身的定义。
7. 什么是私有 IP?
常见 IPv4 私有地址范围包括:
10.0.0.0/8172.16.0.0/12192.168.0.0/16
例如:
1 | 电脑:192.168.1.100 |
这些地址通常用于局域网,不能直接作为全球公网中的普通目的地址进行路由。
8. 什么是 NAT?
NAT(Network Address Translation,网络地址转换)会转换 IP 地址,有些场景还会同时转换端口。
家用路由器常使用 NAPT,也称 PAT,让多个内网设备共享一个公网 IPv4 地址。
示意:
1 | 内网连接: |
上面的公网地址和端口仅为示意。
路由器会记录映射关系,以便收到返回数据时,将数据转回对应的内网设备。
NAT 不等于加密,也不能代替 TLS 的身份认证和数据保护。
七、HTTP、TLS、TCP、IP 分别处于什么层次?
在传统 HTTPS over TCP 场景中,可以这样理解:
1 | 应用层:HTTP |
各层职责不同:
| 协议或技术 | 主要职责 |
|---|---|
| HTTP | 定义请求、响应、请求头和响应正文等 |
| TLS | 身份认证、密钥协商、加密和完整性保护 |
| TCP | 可靠、有序的字节流传输 |
| UDP | 无连接的数据报传输 |
| IP | 寻址与数据包路由 |
| DNS | 将域名解析为 IP 等 DNS 记录 |
| NAT | 在适用的网络设备上转换地址,常伴随端口转换 |
注意:DNS 通常需要在建立目标网站的 TCP/TLS 连接前完成,但 DNS 自身可以使用 UDP、TCP 或其他传输方式。实际网络中还可能涉及代理、VPN、缓存、CDN 等机制。
八、HTTP/1.1、HTTP/2 与 HTTP/3
HTTP 版本与 TLS 版本不是同一个概念。
| HTTP 版本 | 常见传输方式 | 主要特点 |
|---|---|---|
| HTTP/1.1 | TCP,可通过 TLS 使用 HTTPS | 传统的 HTTP 协议版本 |
| HTTP/2 | TCP + TLS 是主流部署方式 | 支持多路复用、头部压缩等 |
| HTTP/3 | QUIC(基于 UDP) | 将传输层机制与 TLS 1.3 安全机制整合 |
传统 HTTPS 常见路线:
1 | HTTP |
HTTP/3 路线:
1 | HTTP/3 |
为什么 HTTP/3 使用 QUIC?
- QUIC 将可靠传输、拥塞控制和 TLS 1.3 安全机制整合在一起。
- QUIC 支持多个独立的数据流,减少一个流的丢包对其他流造成的传输阻塞。
- 在适用场景中,连接建立和网络切换可以更高效。
因此,不能简单地说 HTTPS 必须使用 TCP。HTTPS 可以使用 HTTP/1.1、HTTP/2 或 HTTP/3 等不同组合。
九、常见网络问题与排查方向
排查网络问题时,可以从基础连接逐步向上检查。
1. DNS 解析失败
典型提示:
1 | DNS_PROBE_FINISHED_NXDOMAIN |
可能原因:
- 域名拼写错误。
- 域名不存在或 DNS 记录配置错误。
- DNS 缓存或解析器出现问题。
排查方向:先检查域名与 DNS 解析结果。
2. TCP 连接失败
可能提示:
1 | Connection refused |
可能原因:
- 服务器端口没有服务监听。
- 防火墙或安全组阻止连接。
- 网络路径不通。
- 服务主动拒绝连接。
排查方向:检查目标 IP、端口、服务监听状态和网络策略。
3. 证书错误
例如:
1 | ERR_CERT_DATE_INVALID |
可能原因:
- 证书过期或尚未生效。
- 客户端系统时间不正确。
其他证书错误也可能涉及域名不匹配、证书链不完整或不受信任的 CA。
排查方向:检查系统时间、证书有效期、域名和证书链。
4. HTTP 502 Bad Gateway
502 表示服务器作为网关或代理时,从上游服务器收到了无效响应。
常见排查方向:
- Nginx 或其他反向代理配置。
- 后端服务是否运行。
- 代理目标地址与端口。
- 上游连接和响应情况。
502 不一定是 TLS 证书问题。
5. 常见排查顺序
1 | ① 检查域名与 DNS |
实际排查时应结合错误类型;这是一种思考框架,不是每个问题都必须严格执行的固定步骤。
十、核心概念对照表
| 概念 | 一句话理解 |
|---|---|
| HTTP | 客户端和服务器交换 Web 数据的应用层协议 |
| HTTPS | 使用 TLS 保护的 HTTP 通信 |
| SSL | 已淘汰的旧安全协议 |
| TLS | 为通信提供认证、加密和完整性保护的协议 |
| 证书 | 将身份信息与公钥关联起来的数字文件 |
| CA | 按照验证规则签发证书的机构 |
| 证书链 | 从网站证书到受信任根证书的验证路径 |
| 公钥 | 可公开的密码学密钥 |
| 私钥 | 必须受到保护的密码学密钥 |
| 数字签名 | 验证签名来源与数据完整性的密码学机制 |
| 对称加密 | 使用共享密钥进行加密和解密 |
| ECDHE | 用于协商共享秘密的临时密钥交换机制 |
| 会话密钥 | TLS 根据握手结果派生的通信密钥材料 |
| DNS | 将域名解析为 IP 等记录的系统 |
| IP | 网络层寻址与路由所使用的协议 |
| 端口 | 区分传输层服务端点的编号 |
| TCP | 提供可靠、有序字节流的传输层协议 |
| UDP | 提供无连接数据报传输的协议 |
| NAT | 转换网络地址,常用于多个内网设备共享公网 IPv4 |
| QUIC | 基于 UDP、集成 TLS 1.3 安全机制的现代传输协议 |
十一、最后需要记住的 10 个知识点
- HTTPS = HTTP + TLS 安全保护。
- 现代 HTTPS 使用 TLS,而不是已经淘汰的 SSL。
- 证书把域名等身份信息与公钥关联起来;CA 帮助建立信任。
- 数字签名用于验证签名来源和数据完整性,不等于加密。
- 对称加密适合大量数据传输;TLS 通过握手建立和派生通信密钥。
- 在现代 TLS 1.3 的典型证书握手中,服务器私钥用于握手签名,ECDHE 用于密钥交换。
- DNS 负责解析域名;IP 负责网络寻址;端口用于区分传输层服务。
- TCP 负责可靠传输,不负责加密;TLS 负责通信安全保护。
- NAT 可以转换地址和端口,但不能替代 TLS。
- HTTP/3 使用 QUIC over UDP,不要求使用传统的 TCP 传输路线。
用一句话概括一次 HTTPS 请求:
浏览器先解析域名并找到目标服务器,再通过相应的传输协议建立连接,完成 TLS 身份认证与密钥协商,随后发送受保护的 HTTP 请求、接收 HTTP 响应,最后解析和渲染网页。