HTTP 与 HTTPS:连接背后的安全机制

HTTP 与 HTTPS 的区别、TLS 握手及证书验证

HTTP 与 HTTPS 的区别

HTTP 定义了客户端与服务器之间请求和响应的语义:请求方法、状态码、字段以及消息内容。HTTPS 在安全传输连接上承载 HTTP,让双方可以在经过验证和加密的通道中交换数据。常见默认端口分别是 80 和 443,但端口号本身不是安全性的证明。

以未额外保护的 HTTP 连接作比较,HTTPS 主要增加三个属性:

  • 机密性:传输中的 HTTP 内容被加密,路径上的旁观者无法直接读取正文。
  • 完整性:接收方能够检测传输内容被修改的情况。
  • 身份验证:客户端通常借助服务器证书验证自己连接的是目标域名对应的服务。
对比项HTTP 明文连接HTTPS
应用层语义HTTP 请求与响应HTTP 请求与响应
内容保护自身不提供加密与完整性保护安全传输层提供加密与完整性保护
服务器身份自身不提供证书验证通常使用证书验证
默认端口80443

连接是如何建立的

下面以新建立的 TCP 连接、TLS 1.3 完整握手为例说明基本过程。实际浏览器可能复用连接、恢复会话或使用不同的 HTTP 版本,因此不能把这条流程视为每次请求都必经的步骤。

  1. 确定目标。客户端解析域名并选择目标地址,随后建立 TCP 连接。
  2. 发出 ClientHello。客户端提供支持的 TLS 版本、密码套件、密钥交换参数等协商信息。
  3. 服务器响应。服务器选择参数,发出 ServerHello;双方据此计算握手密钥。TLS 1.3 的后续大部分握手消息受到加密保护。
  4. 验证身份与握手。服务器提供证书及证明,客户端检查证书和签名;双方使用 Finished 消息验证握手完整性。
  5. 交换 HTTP 数据。握手完成后,使用协商出的对称密钥保护应用数据。
DNS 解析→TCP 连接→TLS 握手→HTTP 数据
简化的新连接流程;HTTP/3 使用 QUIC,不采用这里的 TCP 建连路径。

证书不等于“用公钥加密全部网页”。在这条 TLS 1.3 流程中,密钥交换建立共享秘密,证书与签名帮助验证身份,应用数据主要由对称加密算法保护。各部分分工不同。

HTTP/3 在 QUIC 上运行,通常基于 UDP,并将 TLS 1.3 握手集成到 QUIC 中。HTTPS 的安全目标仍然成立,但不能简单把 HTTP/3 描述为“HTTP + TLS + TCP”。

证书究竟验证什么

客户端验证证书时,不是只看“有没有一张证书”。常见检查包括:证书中的名称是否匹配访问的域名、是否在有效期内、证书链是否能连接到受信任的根,以及签名和用途等约束是否符合要求。吊销信息的检查还取决于客户端与部署策略。

证书由受信任的机构签发,并不意味着该网站的所有内容或商业行为都值得信任。它帮助建立通信对象的身份与连接保护,不替网站做内容审查。

如果浏览器提示证书域名不匹配或证书已过期,应检查访问地址、系统时间与服务端证书配置。关闭验证会削弱 HTTPS 的身份保护,不能作为修复证书问题的长期方案。

观察一次 HTTPS 请求

使用 curl 可以查看连接和响应信息。下面以公开的 example.com 为例;输出中的证书、地址、协议与响应字段会随环境变化。需要系统已安装 curl 和受信任的 CA 证书。

Shell
# 显示连接与 TLS 信息,发送 HEAD 请求
curl -vI https://example.com/

观察协商出的 TLS 版本、证书验证结果和 HTTP 状态。-I 发出 HEAD 请求,某些服务器对它的处理与 GET 不完全相同;-v 会增加诊断输出。这里没有使用 -k,因为该选项会跳过证书验证。

区分重定向与加密

Shell
# 查看明文 HTTP 地址本身的响应
curl -I http://example.com/

# 跟随重定向,观察后续响应
curl -IL http://example.com/

HTTP 是否重定向到 HTTPS,取决于站点配置,并不是协议自动保证的行为。即使配置了重定向,第一次明文请求也不会因此变成加密请求。HSTS 可以让支持它的客户端在符合条件时直接使用 HTTPS,避免这类降级路径。

HTTPS 的能力边界

  • 它保护传输,不修复应用漏洞。页面脚本问题、服务端漏洞、被盗账号与恶意内容,仍需要各自的防护。
  • 它不会隐藏所有元数据。目标 IP、数据量和时序通常仍可观察。域名是否暴露还取决于 DNS 传输方式与 TLS 配置等条件。
  • 它的边界与 TLS 终止位置有关。如果连接在 CDN 或反向代理处终止,到源站的下一段连接需要单独保护。
  • 混合内容仍需处理。HTTPS 页面引用明文 HTTP 资源可能被升级或阻止,应使用安全的资源地址。

理解 HTTPS 时,可以分别问三个问题:正在和谁通信、内容是否被加密、传输中能否被悄悄修改。把这三个问题分开,有助于定位证书、协议与应用各自负责的部分。

参考资料

文中的握手流程采用 TLS 1.3 的简化模型,不涵盖会话恢复、0-RTT 与所有扩展。