HTTPS加密原理通俗讲解:SSL/TLS握手到底在做什么
HTTPS 用一句话说清楚
HTTPS = HTTP + 加密。
普通HTTP传输是明文的,中间路由器、运营商、咖啡店WiFi都能看到你的密码、聊天内容。HTTPS把这些内容加密成一串乱码,别人截获也看不懂。
SSL/TLS就是实现加密的那套协议。SSL是老名字,TLS是新版(SSL 3.0的升级版叫TLS 1.0),现在说的”SSL证书”实际都是TLS证书。
握手过程:两个人怎么建立加密通信
用通俗类比解释TLS握手。假设Alice(浏览器)要和Bob(服务器)秘密通话:
第一步:打招呼(ClientHello)
Alice说:”你好Bob,我想和你加密聊天。我支持的加密算法有这些:AES、ChaCha20…我这边生成的随机数是 #1。”
这一步是明文。算法列表和第一个随机数先发过去。
第二步:服务器回应(ServerHello)
Bob回复:”好的Alice,我们用ChaCha20加密吧。我的随机数是 #2。这是我的证书,证明我是Bob。”
证书里包含Bob的公钥(公钥可以公开,私钥Bob自己保管)。
第三步:验证证书
Alice检查证书:
- •证书是可信CA签发的吗?(浏览器内置CA列表里查)
- •域名对得上吗?(证书里的域名 = 我访问的域名)
- •过期了吗?
全部通过,Alice才相信对面真的是Bob。
第四步:生成会话密钥
Alice用Bob的公钥加密一个预主密钥(Pre-Master Secret)发过去。Bob用私钥解密拿到预主密钥。
现在双方都有三个随机数:#1、#2、预主密钥。用同一套算法计算出会话密钥(Session Key)。
关键点:会话密钥双方一样,但全程没明文传输过。即使有人截获所有通信,没有Bob的私钥也算不出这个会话密钥。
第五步:开始加密通信
后续所有数据用会话密钥对称加密。对称加密速度快,适合大量数据传输。
为什么要分两套加密
握手过程用了两种加密,分工不同:
非对称加密(RSA/ECDHE) — 用于握手阶段
- •用公钥加密,私钥解密
- •安全但慢,不适合加密整个会话
- •作用:安全地交换会话密钥
对称加密(AES/ChaCha20) — 用于数据传输
- •双方用同一个密钥加解密
- •快,适合大量数据
- •作用:加密实际通信内容
这就是TLS的精妙之处:用慢但安全的非对称加密,安全地交换一个快但需要保密的对称密钥。两全其美。
TLS 1.3 的改进
TLS 1.2 握手要 2 个往返(RTT),TLS 1.3 简化到 1 个往返,还支持 0-RTT 模式(连接过的服务器可以立即发数据)。
TLS 1.3 的其他改进:
- •删除了不安全的算法(RSA密钥交换、SHA-1、CBC模式)
- •强制使用前向安全(ECDHE),即使私钥泄露,旧通信也无法解密
- •握手消息加密,中间人看不到扩展信息
前向安全(Forward Secrecy)很重要:如果攻击者录制了所有加密通信,以后拿到私钥也不能解密,因为每次会话的密钥都是临时生成的。
证书的作用:防中间人攻击
没有证书的加密通信是不安全的。设想场景:
Alice想连Bob,但中间有个Mallory伪装成Bob。如果Alice不验证证书,就会和Mallory建立加密,Mallory再和Bob建立另一条加密,全程Alice和Bob都以为在直接通信,但内容都被Mallory看到。
证书防止这个攻击:
- •Mallory拿不到Bob的私钥,无法伪造Bob的证书
- •Alice验证证书时发现”这个证书不是Bob的”,断开连接
所以证书的核心作用不是加密,是身份验证。加密用密钥就行,但你要确认密钥确实是对面那个人的,不是中间人的。
为什么自签证书不安全
自签证书 = 自己给自己发证书,没有可信CA背书。
- •加密能力和正规证书一样
- •但浏览器无法验证身份,报”未知颁发机构”
- •中间人可以伪造自签证书,用户看不出来差别
正规证书的可信度来自CA的审核。CA在签发证书前要验证域名所有权(DV)甚至公司资质(OV/EV),确保证书发给真正的主人。
一个形象的总结
把HTTPS通信比作寄信:
- •HTTP = 明信片,邮递员、分拣员都能看到内容
- •HTTPS = 装在密封信封里的信,只有收件人能拆开
- •证书 = 信封上的身份戳,证明这个信确实是你寄给银行的,不是骗子截下来换的
加密保证内容不被偷看,证书保证对方身份不被冒充。两者结合才是完整的HTTPS安全。
—
理解原理对运维SSL有帮助。证书报错时,知道是握手哪一步出问题,排查方向就清晰多了。