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

Security2026-11-07TryQuickToolBox

你可能已经在浏览器中见过那个小锁图标,知道 HTTPS 意味着网站是安全的。但当你访问一个 HTTPS 网站时,实际发生了什么?浏览器和服务器如何协商加密密钥?证书为什么重要?理解 HTTPS 和 TLS 的工作原理对于开发者、系统管理员以及任何构建或保护 Web 应用的人来说都至关重要。

本指南用通俗的语言拆解 TLS 握手、证书验证和加密过程。你将了解 HTTPS 如何保护传输中的数据、常见的陷阱,以及确保你自己网站配置正确的实用步骤。

HTTPS 的真正含义

HTTPS 是 HTTP 在 TLS(传输层安全协议)之上分层的结果。它提供三项保证:

TLS 是 SSL(安全套接层)的继任者。尽管人们仍然说“SSL 证书”,但现代系统使用 TLS。最新版本 TLS 1.3 简化了握手并提高了安全性。

TLS 握手:分步详解

在任何加密的 HTTP 数据流动之前,客户端和服务器会执行握手以协商加密参数并建立共享密钥。以下是典型的 TLS 1.3 握手过程:

  1. Client Hello:客户端发送一条消息,包含支持的 TLS 版本、密码套件和一个随机值(客户端随机数)。
  2. Server Hello:服务器回应其选择的 TLS 版本、密码套件和自己的随机值(服务器随机数)。它还发送自己的证书链。
  3. 密钥交换:使用服务器的证书公钥(或 TLS 1.3 中的密钥共享),客户端和服务器推导出一个共享密钥。在 TLS 1.3 中,这在一个往返内完成。
  4. Finished:双方发送用推导出的密钥加密的 Finished 消息,以验证握手的完整性。

握手之后,应用数据(HTTP 请求和响应)使用从共享密钥推导出的对称密钥进行加密。

证书验证

服务器的证书将其公钥与其身份(域名)绑定。客户端通过以下方式验证证书:

如果验证失败,浏览器会显示警告。在生产环境中绝不要绕过这些警告——它们表明可能存在中间人攻击。

TLS 中的加密:对称与非对称

TLS 同时使用非对称(公钥)和对称加密。非对称加密在握手期间用于安全地交换密钥。对称加密(如 AES 或 ChaCha20)用于批量数据,因为它快得多。

在 TLS 1.3 中,密钥交换通常使用临时 Diffie-Hellman(ECDHE),这提供了前向保密:即使服务器的私钥后来被泄露,过去的会话仍然安全。

常见的 HTTPS 陷阱及如何避免

即使启用了 HTTPS,错误配置也可能削弱安全性。注意以下问题:

实际示例:检查 TLS 配置

你可以使用 OpenSSL 检查服务器的 TLS 设置。例如,查看证书链和协商的协议:

openssl s_client -connect example.com:443 -servername example.com

在输出中查找协议版本和密码。要测试 TLS 1.3 支持:

openssl s_client -connect example.com:443 -tls1_3

定期审计你的配置并保持软件更新。

常见问题

HTTPS 和 TLS 有什么区别?

HTTPS 是 HTTP 的安全版本,而 TLS 是为 HTTPS 提供加密和身份验证的协议。换句话说,HTTPS = HTTP + TLS。

内部服务需要证书吗?

是的,即使对于内部服务,使用 TLS 证书也可以防止网络内的窃听和中间人攻击。你可以使用内部 CA 或自签名证书,但要确保客户端信任它们。

证书应该多久更新一次?

证书的有效期由 CA 设定。许多组织使用 90 天证书并自动续期。监控到期日期并自动化续期以避免中断。

想快速分析 Nginx 访问日志中的可疑活动或性能问题?试试我们的 Nginx 日志分析器,几秒钟内解析并可视化日志数据。