HTTPS与TLS究竟如何工作:分步指南

Security2026-10-23TryQuickToolBox

你大概见过浏览器里的挂锁图标,并默认你的连接是安全的。但当你访问一个HTTPS网站时,实际发生了什么?你的浏览器如何知道它正在与真正的服务器通信,而不是冒充者?为什么TLS有时会拖慢你的网站?

在本指南中,我们将逐步讲解握手过程,揭开HTTPS和TLS的神秘面纱。你将了解证书、对称与非对称加密的作用,以及如何在你自己项目中验证并优化TLS。

HTTPS和TLS实际做什么

HTTPS是构建在TLS(传输层安全)之上的HTTP。TLS提供三项保证:

没有TLS,HTTP流量以明文发送。网络路径上的任何人(Wi-Fi热点、ISP、被攻陷的路由器)都能读取或篡改它。TLS通过在任何HTTP数据交换之前建立安全通道来解决这个问题。

TLS握手:逐步解析

握手是奇迹发生的地方。它是一个协商过程,用于建立共享密钥并验证身份。以下是TLS 1.2和1.3(你今天会遇到的两种版本)的简化流程。

第1步:Client Hello

客户端(浏览器)发送一条ClientHello消息,包含:

第2步:Server Hello与证书

服务器以ServerHello(选定的版本、密码套件、服务器随机数)及其证书作为响应。证书包含服务器的公钥,并由证书颁发机构(CA)签名。

客户端验证证书:是否过期?是否由受信任的CA签发?域名是否匹配?如果不匹配,浏览器会显示警告。

第3步:密钥交换

使用服务器的公钥(或Diffie-Hellman参数),客户端和服务器推导出一个共享的预主密钥。在TLS 1.3中,这通过临时Diffie-Hellman(ECDHE)完成,提供前向保密:即使服务器的私钥后来被泄露,过去的会话仍然安全。

第4步:Finished

双方发送用新推导出的密钥加密的Finished消息。如果解密成功,握手就完成了。从那时起,所有应用数据(HTTP)都用对称加密(例如AES-GCM或ChaCha20-Poly1305)加密。

TLS 1.3的改进

TLS 1.3将握手减少到一次往返(1-RTT),并支持针对回访访客的0-RTT恢复。它还移除了过时的算法,使其更快、更安全。大多数现代浏览器和服务器都支持TLS 1.3。

TLS中的对称与非对称加密

TLS使用这两种加密类型是有充分理由的:

这种混合方法让你同时获得公钥加密的安全性和对称密码的性能。

证书:信任锚点

证书将公钥绑定到域名,并由CA签名。浏览器和操作系统附带一个受信任根CA的存储库。当服务器出示其证书时,客户端会构建一条回到受信任根的信任链。

证书有有限的生命周期(现在使用Let's Encrypt通常为90天)。过期证书会导致浏览器错误,因此请自动化续期。

实践:用OpenSSL检查TLS

你可以使用openssl命令行工具检查服务器的TLS配置。这有助于调试握手失败或验证密码套件。

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

这会连接到服务器并打印证书链、协商的密码和会话详情。查找Verify return code: 0 (ok)以确认证书有效。

检查证书过期时间:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates

常见TLS陷阱及如何避免

优化TLS性能

TLS会因握手而增加延迟。以下是如何将其最小化:

常见问题

HTTPS和TLS有什么区别?

HTTPS是HTTP的安全版本,而TLS是提供安全性的密码协议。HTTPS使用TLS来加密和验证连接。

TLS如何提供前向保密?

前向保密确保即使服务器的私钥被泄露,过去的会话密钥也无法被推导出来。它通过在TLS 1.3和现代TLS 1.2配置中使用临时Diffie-Hellman密钥交换(ECDHE)来实现。

为什么我在某些网站上看到证书错误?

证书错误通常意味着证书已过期、自签名、为其他域名签发,或证书链不完整。浏览器拒绝此类证书,以保护你免受中间人攻击。

当你需要检查或调试TLS连接时,像Timestamp Converter这样的工具可以帮助你解码证书有效期并调试与时间相关的问题。