TLS和TCP
HTTPS 不是只用于“浏览器和服务”
HTTPS = HTTP + TLS + TCP
➡️ 本质是“任何 HTTP 应用 + TLS 加密”
1. 浏览器 ↔ 服务(最常见)
- Chrome / Safari / App 内 WebView
- HTTPS + 证书校验 + TLS
2. 服务 ↔ 服务(也很常见)
例如:
- 微服务调用(A服务 → B服务)
- App 后端 → 支付系统
- 后端 → 第三方 API(微信/支付宝/云服务)
➡️ 也可以用 HTTPS(非常常见)
3. 服务间 HTTPS vs 浏览器 HTTPS
浏览器场景
- 重点:用户身份信任(证书必须被系统信任CA签发)
- 会严格校验域名 + UI警告
服务间通信
- 重点:机器身份认证
- 常见做法:
- HTTPS(公有 CA 或私有 CA)
- mTLS(双向 TLS,双方都要证书)
4. 服务 ↔ 服务常见增强版:mTLS
普通 HTTPS
- 服务器有证书
- 客户端验证服务器
mTLS(双向 TLS)
- 服务器有证书
- 客户端也有证书
- 双方互相验证身份
➡️ 用于:
- 微服务
- 金融系统
- 内网高安全通信
双方都需要信任同一个体系的CA
✔️ ① 持有证书(身份)
- 客户端有客户端证书
- 服务端有服务端证书
✔️ ② 信任CA(验证对方)
- 客户端信任某些CA(用来验服务端证书)
- 服务端信任某些CA(用来验客户端证书)
TCP + TLS(HTTPS)核心流程
1. TCP 三次握手
- SYN
- SYN + ACK
- ACK
➡️ 建立可靠连接
2. TLS 握手(认证 + 密钥协商)
Client Hello
- 支持的加密算法
- Client Random
- SNI(域名)
Server Hello
- 选定加密算法
- Server Random
- 证书(域名 + 公钥 + CA签名)
证书验证(关键)
- 用 CA 公钥验证签名(防篡改 + 证明 CA 签发)
- 检查证书域名是否匹配访问域名
密钥协商
- 双方用 Random + ECDHE 等生成共享密钥
➡️ 得到对称加密密钥(session key)
握手结束
- Finished message(开始加密通信)
3. HTTPS 数据传输
- HTTP 数据
→ TLS(对称加密)
→ TCP 传输
→ 对端解密还原 HTTP
4. 证书 & 签名本质
证书
- 域名 + 公钥 + CA签名
签名
- CA 用私钥对证书 hash 做签名
- 作用:防篡改 + 证明来源
5. 核心一句话
- TCP:连通
- TLS:加密 + 身份认证
- 证书:证明“域名 ↔ 公钥”绑定可信
