从HTTP到HTTPS

当你在浏览器里输入 www.example.com 并按下回车,看似平平无奇的一次访问,其实暗藏着 SSL/TLS 的三次握手、对称与非对称加密的轮番上阵、CA 证书的"身份核验"以及防中间人攻击的多重机关。

一、SSL、TLS、HTTPS 到底是什么关系?

  • SSL(Secure Sockets Layer):早期网景公司设计的加密协议,1999 年后停止更新。
  • TLS(Transport Layer Security):SSL 的直系升级版,目前主流版本为 TLS 1.2/1.3。
  • HTTPS :把 HTTP 报文塞进 TLS 的"安全信封"里,再交给 TCP 传输。简而言之,HTTPS = HTTP + TLS/SSL。

二、HTTPS 握手

  1. ClientHello

    浏览器把支持的加密套件、随机数 A、TLS 版本号一起发给服务器。

  2. ServerHello + 证书

    服务器挑一套加密算法,返回随机数 B,并附上自己的数字证书(含公钥)。

  3. 验证证书 + 生成会话密钥

    浏览器先给证书"验明正身"------颁发机构是否可信、证书是否被吊销、域名是否匹配。

    验证通过后,浏览器生成随机数 C(Pre-Master-Secret),用服务器证书里的公钥加密后发送。双方根据 A、B、C 算出同一把对称密钥。

  4. Finished

    双方都用这把对称密钥加密一条"Finished"消息互发,握手完成。之后的所有 HTTP 数据都用这把对称密钥加解密,速度快、强度高。

三、为什么必须有 CA?

没有 CA,任何人都可以伪造公钥,中间人攻击将防不胜防。CA 通过可信第三方背书,把"公钥属于谁"这件事写死在证书里,浏览器才能放心地相信"这就是真正的服务器"。

四、证书到底怎么防伪?

证书 = 域名 + 公钥 + 有效期 + CA 数字签名。

CA(Certificate Authority)用自己的私钥对整个证书做哈希签名。浏览器内置 CA 公钥,可解密签名并对比哈希值,一旦被篡改就立即报警。

没有 CA 签名的自签证书?浏览器会毫不留情地显示"红色警告"。

五、对称与非对称加密的分工

  • 非对称加密(RSA/ECC):只在握手阶段用一次,解决"如何安全地交换对称密钥"。
  • 对称加密(AES/ChaCha20):握手完成后,所有 HTTP 报文都用对称密钥加解密,性能高、延迟低。

一句话:非对称加密"送钥匙",对称加密"锁大门"。

六、中间人攻击的两张面孔

  1. SSL 劫持

    攻击者伪造证书、偷梁换柱。浏览器会提示证书错误,但不少用户习惯性点击"继续访问",于是流量被窃听。

  2. SSL 剥离

    攻击者把用户的 HTTPS 请求降级成 HTTP,服务器以为在加密,客户端却在明文裸奔。HSTS(HTTP Strict Transport Security)能强制浏览器只走 HTTPS,遏制这种降级。

总结

  1. 证书是身份证,CA 是公安局。
  2. 非对称握手送钥匙,对称加密跑数据。
  3. 没有 CA 的 HTTPS,就像没有钢印的合同------谁都能伪造。

下次当你在地址栏看到那把绿色小锁时,背后是一场涉及四次握手、两把密钥、一张证书和全球信任链的加密大戏。

相关推荐
利威尔xu41 分钟前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
修己xj44 分钟前
我用 AI 给自己写了一个 Markdown 编辑器,然后把它开源了
前端
FRing031 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
幸运小猿1 小时前
模拟慢上传-处理超时重试image 丢失线上问题
前端·javascript·html
利威尔xu2 小时前
Go IM 源码实战(13):30 个会话只有 2 个红点,未读数错在三条路径
redis·后端·微服务·面试·golang
cyf312 小时前
第 05 篇:IP 协议—— 网络层的“快递单号与物流追踪“
网络协议·tcp/ip·路由表·traceroute·ip协议·ping·ip分片
moshuying3 小时前
网购能买Token了!
前端
h_65432103 小时前
echarts实现柱状图加一条横线
前端·echarts
风骏时光牛马3 小时前
生成一个后端标题,只需要一个标题,不需要其他的任何文本。
前端
子非鱼@Itfuture3 小时前
关于前后端联调中登录状态/登录信息失效?
java·前端