HTTPS 与 TLS 工作原理详解:握手过程揭秘

Security2026-10-22TryQuickToolBox

你输入一个网址,按下回车,一个锁形图标出现了。但浏览器和服务器之间到底发生了什么,才让这个连接变得安全?许多开发者把 HTTPS 当作一个黑盒——直到出问题,比如证书错误或性能问题。本文揭开 TLS(HTTPS 背后的协议)的面纱,用通俗的语言解释握手过程。

HTTPS 到底是什么

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

没有 TLS,HTTP 以明文发送所有内容:密码、Cookie 和表单数据对网络路径上的任何人都可见。

通俗解释 TLS 握手

握手是在发送任何应用数据之前进行的协商。其目标是:商定加密算法、验证服务器身份、建立共享密钥。以下是 TLS 1.3(现代标准)的流程:

  1. Client Hello – 浏览器发送支持的密码套件列表、一个随机数以及它的密钥共享(用于密钥交换)。
  2. Server Hello – 服务器选择一个密码套件,发送自己的随机数和密钥共享,并提供证书链。
  3. 证书验证 – 浏览器对照受信任的根 CA 检查证书,验证域名,并检查有效期。
  4. 密钥派生 – 双方使用密钥交换(通常是 ECDHE)计算出相同的共享密钥。会话密钥由此派生。
  5. Finished – 双方对握手记录发送 MAC,以确认没有被篡改。

之后,加密的应用数据开始流动。在 TLS 1.3 中,握手需要一次往返(1-RTT),恢复会话可以实现 0-RTT。

TLS 1.2 与 TLS 1.3 对比

TLS 1.2 需要两次往返,并且支持较弱的算法。TLS 1.3 移除了过时的密码套件,简化了握手,并加密了更多握手过程本身。始终优先使用 TLS 1.3;大多数现代服务器和浏览器都支持它。

证书:信任锚点

证书将公钥与域名绑定,并由证书颁发机构(CA)签名。浏览器内置了受信任根 CA 的存储。在验证过程中,浏览器从服务器证书构建一条链,直到受信任的根。

常见的证书类型:

证书会过期。使用 Certbot 等 ACME 客户端自动续期,以避免服务中断。

密钥交换与完美前向保密

现代 TLS 使用临时密钥交换(ECDHE)。每次会话生成新的密钥对,因此即使服务器的私钥后来被泄露,过去的会话也无法解密。这一特性称为前向保密。避免使用静态 RSA 密钥交换,它缺乏这种保护。

常见的 HTTPS 陷阱及避免方法

调试 TLS 问题

当握手失败时,使用 openssl s_client 检查连接:

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

这会显示证书链、协商的协议和密码套件。对于浏览器特定的错误,请检查开发者工具中的安全面板。

常见问题

HTTPS 和 TLS 是一回事吗?

HTTPS 是运行在 TLS 上的 HTTP。TLS 是加密协议;HTTPS 是 HTTP 应用协议的安全版本。

每个子域名都需要单独的证书吗?

不一定。通配符证书覆盖所有一级子域名,多域名(SAN)证书可以列出多个名称。

TLS 1.3 如何提升性能?

TLS 1.3 将握手减少到一次往返(恢复时为零次),并简化了密码协商,从而降低延迟。

准备好检查自己网站的安全性了吗?使用我们的 Nginx 日志分析器 来发现日志中可疑的 TLS 错误和握手失败。