HTTPS 与 TLS 工作原理:深入解析

Security2026-11-08TryQuickToolBox

输入网址,按下回车,看到小锁图标。但浏览器和服务器之间到底发生了什么,才让连接变得安全?许多开发者把 HTTPS 当成黑盒——直到出问题,比如证书错误或性能问题。本文揭开 HTTPS 和 TLS 的面纱,用实用的语言解释握手、加密和证书验证。

HTTPS 的本质

HTTPS 就是 HTTP 运行在 TLS(传输层安全协议)之上。TLS 提供三项保证:

TLS 由 SSL(安全套接层)演变而来。应使用现代版本(TLS 1.2 和 1.3);SSL 已弃用。

TLS 握手:逐步解析

在任何 HTTP 数据流动之前,客户端和服务器会进行握手,协商加密密钥。以下是典型的 TLS 1.3 握手过程(简化版):

  1. Client Hello: 浏览器发送支持的密码套件列表、一个随机值,以及用于密钥交换的密钥共享。
  2. Server Hello: 服务器选择密码套件,发送自己的随机值和密钥共享,并出示证书。
  3. 密钥派生: 双方通过 Diffie-Hellman 密钥交换计算出相同的共享密钥。由此派生出用于对称加密的会话密钥。
  4. Finished: 双方发送 MAC(消息认证码)以验证握手完整性。加密的应用数据现在可以流动了。

TLS 1.3 将握手减少到一次往返(1-RTT),甚至支持会话恢复时的 0-RTT,从而改善延迟。

密钥交换:Diffie-Hellman

现代 TLS 的神奇之处在于,客户端和服务器可以协商出一个共享密钥,而无需传输它。Diffie-Hellman(具体是椭圆曲线的 ECDHE)实现了这一点。即使攻击者记录了整个握手过程,也无法推导出会话密钥——这一特性称为前向保密。

对称加密:AES 或 ChaCha20

共享密钥建立后,TLS 切换到对称加密(如 AES-GCM 或 ChaCha20-Poly1305),因为它比非对称加密快得多。会话密钥用于加密所有应用数据。

证书验证:信任但要验证

服务器的证书是身份验证的核心。它包含服务器的公钥,并由证书颁发机构(CA)签名。浏览器验证证书的过程如下:

如果任何检查失败,你会收到警告——比如“您的连接不是私密连接”。

常见的 TLS 错误配置

即使启用了 HTTPS,错误也可能削弱安全性:

使用 SSL Labs 的 SSL Test 等工具检查你的配置。

实际示例:使用 Nginx 启用 HTTPS

以下是一个安全的 HTTPS 服务器的最小 Nginx 配置:

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;

    location / {
        root /var/www/html;
        index index.html;
    }
}

此配置使用 Let's Encrypt 证书,仅启用 TLS 1.2 和 1.3,并设置 HSTS。

常见问题

TLS 和 SSL 有什么区别?

TLS 是 SSL 的继任者。SSL 版本(2.0、3.0)因安全漏洞已弃用。当人们说“SSL 证书”时,通常指的是 TLS 证书。

HTTPS 会让我的网站变慢吗?

现代 TLS(1.3)增加的延迟极小——通常只有几毫秒。借助会话恢复和 HTTP/2,HTTPS 可以像 HTTP 一样快,甚至更快。

如何获取免费的 TLS 证书?

Let's Encrypt 提供免费、自动化的证书。Certbot 等工具可以为你获取和续期证书。

结论

HTTPS 和 TLS 并非魔法——它们是精心设计的协议,将用于身份验证的公钥密码学与用于速度的对称加密相结合。理解握手和证书验证有助于你调试问题并安全地配置服务器。始终使用 TLS 1.2 或 1.3,保持证书更新,并启用 HSTS。

要分析服务器日志以发现 TLS 错误或性能问题,试试我们的 Nginx 日志分析器。