HTTPS 原理详解:从证书到握手的完整流程
时间:2026-10-4 10:05 作者:emer 分类: 无
前言
HTTPS 现在已经是网站标配了,但很多人只知道"HTTPS 更安全",却不知道它到底是怎么安全的。本文用最通俗的方式,带你完整理解 HTTPS 的工作原理。
一、HTTP 为什么不安全
HTTP 是明文传输的,就像你在明信片上写信,邮局的每个人都能看到内容。
具体来说,HTTP 有三个问题:
- 窃听风险:中间人可以看到你传输的所有内容
- 篡改风险:中间人可以修改你传输的内容
- 冒充风险:中间人可以冒充服务器欺骗你
HTTPS 就是为了解决这三个问题而生的。
二、HTTPS = HTTP + SSL/TLS
HTTPS 本质上就是在 HTTP 和 TCP 之间加了一层 SSL/TLS 协议。
TLS 做了三件事:
- 加密:数据加密传输,中间人看不到内容
- 完整性校验:数据被篡改了能发现
- 身份认证:确认你连接的是真的服务器
三、数字证书
HTTPS 信任的基础是数字证书。
你可以把数字证书理解成身份证:
- 谁发的:CA 机构(证书颁发机构)
- 证明什么:这个域名属于谁
- 有效期:身份证有有效期,证书也有
- 怎么验证:CA 用私钥签名,浏览器用公钥验证
常见的免费证书:Let's Encrypt
四、TLS 握手流程
TLS 握手是 HTTPS 最核心的部分,用大白话讲一遍:
第一步:Client Hello
客户端说:"你好,我支持这些加密算法,这是我的随机数 A。"
Client → Server:
- TLS 版本
- 支持的加密算法列表
- 随机数 A
第二步:Server Hello
服务器说:"好的,我们用这个加密算法,这是我的随机数 B,这是我的证书。"
Server → Client:
- 选择的加密算法
- 随机数 B
- 数字证书(包含服务器公钥)
第三步:客户端验证证书
客户端做几件事:
- 证书是不是可信 CA 签的?
- 证书过期了没?
- 证书上的域名和当前访问的域名一致吗?
验证通过,才继续。
第四步:生成会话密钥
客户端用服务器公钥加密一个"预主密钥"发给服务器。
Client → Server:
- 预主密钥(用服务器公钥加密)
服务器用自己的私钥解密,拿到预主密钥。
然后客户端和服务器都用:
- 随机数 A
- 随机数 B
- 预主密钥
这三个东西,计算出会话密钥(Session Key)。
第五步:开始加密通信
双方都有了会话密钥,之后的所有通信都用这个密钥加密。
Client ↔ Server:
- 用会话密钥加密的数据
五、为什么用非对称加密交换密钥,对称加密传数据
这是很多人困惑的点:
- 非对称加密(公钥私钥):安全但慢
- 对称加密(同一个密钥):快但不安全
HTTPS 的设计很巧妙:
- 先用非对称加密安全地交换会话密钥(只交换一次)
- 然后用对称加密快速传输数据(所有通信都用这个密钥)
既保证了安全,又保证了性能。
六、证书链
一张证书不是孤立的,它背后有一条证书链:
根证书(Root CA)
└─ 中间证书(Intermediate CA)
└─ 服务器证书(你的网站)
浏览器信任根证书,根证书签中间证书,中间证书签你的服务器证书。这样一层层验证下来,就信任了你的服务器证书。
七、常见问题
1. 为什么有的网站 HTTPS 显示"不安全"
通常是因为:
- 证书过期了
- 证书域名不匹配
- 证书是自签名的,不是可信 CA 签发的
- 页面里混了 HTTP 的资源
2. HTTPS 一定安全吗?
不一定。如果:
- 你电脑上的根证书被篡改了
- CA 机构被攻破了
- 你主动信任了恶意证书
那 HTTPS 也会不安全。
3. HTTPS 会影响性能吗?
会有一点影响,主要在握手阶段。但现在 TLS 1.3 已经把握手优化到 1-RTT,加上会话复用,性能影响很小了。
总结
HTTPS 的核心思路:
- 用非对称加密安全交换会话密钥
- 用对称加密快速传输数据
- 用数字证书验证服务器身份
- 用 MAC 校验数据完整性
搞懂这四点,HTTPS 的原理你就掌握了一大半。