HTTP 与 HTTPS 的区别
HTTP 定义了客户端与服务器之间请求和响应的语义:请求方法、状态码、字段以及消息内容。HTTPS 在安全传输连接上承载 HTTP,让双方可以在经过验证和加密的通道中交换数据。常见默认端口分别是 80 和 443,但端口号本身不是安全性的证明。
以未额外保护的 HTTP 连接作比较,HTTPS 主要增加三个属性:
- 机密性:传输中的 HTTP 内容被加密,路径上的旁观者无法直接读取正文。
- 完整性:接收方能够检测传输内容被修改的情况。
- 身份验证:客户端通常借助服务器证书验证自己连接的是目标域名对应的服务。
| 对比项 | HTTP 明文连接 | HTTPS |
|---|---|---|
| 应用层语义 | HTTP 请求与响应 | HTTP 请求与响应 |
| 内容保护 | 自身不提供加密与完整性保护 | 安全传输层提供加密与完整性保护 |
| 服务器身份 | 自身不提供证书验证 | 通常使用证书验证 |
| 默认端口 | 80 | 443 |
连接是如何建立的
下面以新建立的 TCP 连接、TLS 1.3 完整握手为例说明基本过程。实际浏览器可能复用连接、恢复会话或使用不同的 HTTP 版本,因此不能把这条流程视为每次请求都必经的步骤。
- 确定目标。客户端解析域名并选择目标地址,随后建立 TCP 连接。
- 发出 ClientHello。客户端提供支持的 TLS 版本、密码套件、密钥交换参数等协商信息。
- 服务器响应。服务器选择参数,发出 ServerHello;双方据此计算握手密钥。TLS 1.3 的后续大部分握手消息受到加密保护。
- 验证身份与握手。服务器提供证书及证明,客户端检查证书和签名;双方使用 Finished 消息验证握手完整性。
- 交换 HTTP 数据。握手完成后,使用协商出的对称密钥保护应用数据。
证书不等于“用公钥加密全部网页”。在这条 TLS 1.3 流程中,密钥交换建立共享秘密,证书与签名帮助验证身份,应用数据主要由对称加密算法保护。各部分分工不同。
HTTP/3 在 QUIC 上运行,通常基于 UDP,并将 TLS 1.3 握手集成到 QUIC 中。HTTPS 的安全目标仍然成立,但不能简单把 HTTP/3 描述为“HTTP + TLS + TCP”。
证书究竟验证什么
客户端验证证书时,不是只看“有没有一张证书”。常见检查包括:证书中的名称是否匹配访问的域名、是否在有效期内、证书链是否能连接到受信任的根,以及签名和用途等约束是否符合要求。吊销信息的检查还取决于客户端与部署策略。
证书由受信任的机构签发,并不意味着该网站的所有内容或商业行为都值得信任。它帮助建立通信对象的身份与连接保护,不替网站做内容审查。
如果浏览器提示证书域名不匹配或证书已过期,应检查访问地址、系统时间与服务端证书配置。关闭验证会削弱 HTTPS 的身份保护,不能作为修复证书问题的长期方案。
观察一次 HTTPS 请求
使用 curl 可以查看连接和响应信息。下面以公开的 example.com 为例;输出中的证书、地址、协议与响应字段会随环境变化。需要系统已安装 curl 和受信任的 CA 证书。
# 显示连接与 TLS 信息,发送 HEAD 请求
curl -vI https://example.com/观察协商出的 TLS 版本、证书验证结果和 HTTP 状态。-I 发出 HEAD 请求,某些服务器对它的处理与 GET 不完全相同;-v 会增加诊断输出。这里没有使用 -k,因为该选项会跳过证书验证。
区分重定向与加密
# 查看明文 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 与所有扩展。