HTTPS 与 TLS 工作原理:实用指南

Security2026-10-25TryQuickToolBox

你输入一个 URL,按下回车,页面就加载出来了。锁形图标告诉你连接是安全的,但浏览器和服务器之间到底发生了什么?如果你是开发者,理解 HTTPS 和 TLS 不仅仅是学术问题——它影响你如何配置服务器、调试连接错误以及保护用户数据。

本指南用通俗的语言拆解 TLS 握手、加密层和证书验证。你将了解 HTTPS 真正的工作原理,并为自己的项目获取实用技巧。

HTTPS 和 TLS 究竟是什么

HTTPS 是运行在 TLS 之上的 HTTP。TLS(传输层安全协议)是加密传输中数据的密码学协议。当你访问一个 HTTPS URL 时,浏览器和服务器会执行 TLS 握手,在交换任何 HTTP 数据之前协商加密密钥。

TLS 多年前就取代了 SSL(安全套接层),但这两个术语经常被混用。现代浏览器支持 TLS 1.2 和 TLS 1.3;旧版本因已知漏洞已被弃用。

TLS 握手:分步解析

握手建立安全通道。以下是典型的 TLS 1.2 握手过程(TLS 1.3 进一步简化了此过程):

  1. Client Hello:浏览器发送支持的密码套件列表、TLS 版本和一个随机值(客户端随机数)。
  2. Server Hello:服务器选择一个密码套件,发送自己的随机值(服务器随机数),并出示其 SSL/TLS 证书。
  3. 证书验证:浏览器对照受信任的根 CA 检查证书,验证域名并检查有效期。
  4. 密钥交换:客户端使用证书的公钥加密一个预主密钥并发送给服务器。双方推导出相同的会话密钥。
  5. Finished:双方发送用新会话密钥加密的 Finished 消息,确认握手成功。

在 TLS 1.3 中,握手减少到一次往返(1-RTT),并支持 0-RTT 恢复用于重复连接,从而改善延迟。

加密:对称与非对称

TLS 使用两种加密类型:

握手期间推导出的会话密钥是对称密钥。它们确保即使有人捕获了加密流量,没有密钥也无法解密。

证书验证:信任但要验证

证书由证书颁发机构(CA)签发。浏览器和操作系统附带受信任根 CA 的列表。当服务器出示证书时,浏览器会验证:

如果任何检查失败,浏览器会显示警告。作为开发者,你可以使用 openssl s_client 等工具检查证书并调试链问题。

常见的 TLS 错误配置及修复方法

问题症状修复
证书过期浏览器警告:“证书已过期”续订证书并使用 Let's Encrypt 自动化续订
证书链不完整部分客户端失败,其他正常在服务器配置中包含中间证书
弱密码套件安全扫描器标记漏洞禁用过时的密码(如 RC4、3DES)并启用 TLS 1.3
混合内容锁形图标显示警告或混合内容错误通过 HTTPS 提供所有资源(图片、脚本)

使用在线 SSL 检查器或命令行工具定期审计你的配置。

给开发者的实用技巧

以下是一个快速 Nginx 配置片段,用于启用现代 TLS 设置:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers off;

    add_header Strict-Transport-Security "max-age=63072000" always;
}

此配置启用 TLS 1.2 和 1.3,使用强密码,并设置 HSTS。

常见问题

HTTPS 和 TLS 有什么区别?

HTTPS 是分层在 TLS 之上的 HTTP。TLS 是提供加密和身份验证的协议。因此,HTTPS 是 HTTP 的安全版本,由 TLS 提供支持。

TLS 握手如何建立共享密钥?

客户端和服务器使用非对称密码学(如 ECDHE)在不直接传输的情况下协商出一个共享秘密。然后,它们从该秘密推导出对称会话密钥来加密数据。

为什么证书会过期?

过期限制了私钥被泄露时的损害,并鼓励自动化续订。短生命周期证书是安全最佳实践。

准备好检查你自己的 TLS 设置了吗?使用 TryQuickToolBox 的 Nginx 日志分析器 来发现服务器日志中的 TLS 错误和握手失败。