HTTP裸奔,HTTPS穿盔甲——它们有什么区别?
你有没有想过一个问题:为什么有的网站显示"不安全",有的显示"安全"?同样是HTTP,加了个"S"到底有什么区别?
今天,我用写信的故事,来讲讲HTTPS到底在加密什么。
原文地址
墨渊书肆/HTTP裸奔,HTTPS穿盔甲——它们有什么区别?
HTTP是怎么"裸奔"的?
想象一下,你给朋友寄信。
如果用HTTP,相当于你把信写在明信片上,直接塞进邮筒。
邮递员、门卫、邻居——谁都能看到信里的内容。
你写的「我爱你」「我的密码是123456」——所有人都一览无余。
这就是HTTP的现状:数据是明文传输的,谁都能偷看。
HTTP会被谁偷看?
- 隔壁老王连上了同一个WiFi
- 运营商能查到你在访问什么网站
- 某些"中间人"专门拦截网络流量
所以在HTTP上输密码、填银行卡——跟裸奔没什么区别。
HTTPS是怎么"穿盔甲"的?
现在换一种方式。
你把信放进一个带锁的盒子里,只有你和朋友有钥匙。
邮递员拿到了盒子?没关系,他打不开。
这就是HTTPS:数据是加密传输的,别人看到了也看不懂。
HTTPS怎么做到加密?
这就涉及到两种加密方式:对称加密和非对称加密。
对称加密:一把钥匙(代表:AES)
对称加密就像一把钥匙,能开锁也能锁门。
- 加密用这把钥匙
- 解密也用这把钥匙
AES(Advanced Encryption Standard,高级加密标准)就是最典型的对称加密算法。
- 优点:速度快,加密1G数据可能只需要几毫秒
- 缺点:密钥传输问题——怎么把这把钥匙安全地交给对方?
现实中的问题
你想给朋友寄一把钥匙过去,但邮递员能看到啊!他拿到钥匙之后,不就能打开你的盒子了吗?
这就是对称加密的困境:钥匙送不到对方手里。
AES到底有多强?
AES是现在最常用的对称加密算法,被美国政府采用,取代了之前的DES。
它有多安全?
- AES-128:密钥长度128位,暴力破解需要上万亿年
- AES-256:更安全,连量子计算机都很难破解
所以AES本身是非常安全的,关键是怎么安全地把密钥送到对方手里。
非对称加密:两把钥匙(代表:RSA)
后来密码学家发明了非对称加密,像是一把神奇的锁。
它配两把钥匙:
- 公钥(Public Key):锁,可以复制多份分发出去
- 私钥(Private Key):钥匙,只有自己手里有
RSA就是最著名的非对称加密算法,由三位数学家Rivest、Shamir、Adleman的名字命名。
RSA是怎么工作的?
- 你生成一对密钥:公钥和私钥
- 把公钥(锁)公开,谁都可以拿到
- 别人用你的公钥加密信息
- 只有你手里的私钥能解密
怎么用?
- 你把公钥(锁)寄给朋友
- 朋友把信放进盒子里,用锁锁好
- 只有你手里的私钥(钥匙)能打开
这样一来,公钥寄出去没关系,反正只能用来"锁",不能用来"开"。
RSA的缺点
- 非常慢:比对称加密慢几百甚至上千倍
- 只能加密少量数据:一般用来加密"密钥",而不是大量内容
这就是为什么不能全程用RSA加密。
HTTPS是怎么结合两者的?
HTTPS很聪明,它把两者结合起来用:
- 用RSA等非对称加密,把一把"对话密钥"(会话密钥)安全地传给对方
- 之后双方都用"对话密钥"做AES对称加密,速度就快了
这就跟做生意一样:
- 见面谈判(慢,但安全)→ 确立合作方式,交换暗语
- 之后用暗语交流(快)→ 正式合作
HTTPS也是这个道理:先"握手"一次确定加密方式(用RSA),之后就快(用AES)了。
具体流程
第一次访问(握手):
1. 浏览器:你好,我想访问 example.com
2. 服务器:你好,这是我的证书(包含RSA公钥)
3. 浏览器:(验证证书)OK,我生成一个随机数作为会话密钥
4. 浏览器:用服务器的RSA公钥加密会话密钥,发给服务器
5. 服务器:用RSA私钥解密,得到会话密钥
后续通信:
6. 浏览器 & 服务器:用会话密钥 + AES算法,加密/解密所有数据
证书:怎么证明"你是你"?
等等!上面的方案有个漏洞。
如果有个坏人假冒服务器呢?
比如他拦截了你的公钥请求,然后把自己的公钥寄给你——这叫"中间人攻击"。
你以为是跟朋友通信,实际上是跟坏人通信!
怎么办?
你需要证明身份。
HTTPS引入了证书机制,就像身份证一样。
证书是怎么工作的?
- 网站去CA机构(Certificate Authority,证书颁发机构)申请一个证书
- CA机构核实网站身份,用自己的私钥给证书"签名"
- 证书里包含:网站域名、网站的RSA公钥、CA的签名
- 浏览器访问网站时,先验证证书
浏览器内置了一些可信的CA机构(比如DigiCert、Let's Encrypt、GlobalSign),就像公安局一样。
如果证书是假的,或者域名对不上——浏览器会显示"不安全"。
证书链:验证过程
你可能会想:CA机构 themselves 谁来证明?
这就是证书链:
- 根证书:浏览器内置,最可信
- 中间证书:CA机构颁发
- 服务器证书:你申请的
浏览器会一级一级验证上去。
TLS握手:到底发生了什么?
你访问一个HTTPS网站时,背后会发生这些事情:
1. 浏览器:你好,我想访问 example.com(用的是HTTPS)
2. 服务器:你好,这是我的证书(包含RSA公钥)
3. 浏览器:(验证证书)OK,这是合法的网站
4. 浏览器:我生成一个随机数(会话密钥),用你的公钥加密后发给你
5. 服务器:用我的私钥解密,得到会话密钥
6. 浏览器 & 服务器:好的,用这个会话密钥 + AES算法,开始加密通信
这就是著名的TLS握手(HTTPS = HTTP + TLS)。
握手完成之后,后续的数据传输就都是加密的、很快的。
SSL/TLS/HTTPS到底是什么关系?
- SSL(Secure Sockets Layer):最早的安全协议,1994年由Netscape发明
- TLS(Transport Layer Security):SSL的升级版,1999年发布,SSL的继任者
- HTTPS:HTTP + TLS,简单说就是"穿上TLS盔甲的HTTP"
现在基本都用TLS,但很多人还是习惯叫HTTPS为SSL。
HTTPS有什么缺点?
虽然HTTPS很好,但不是完美的。
1. 慢一点
TLS握手需要时间,首次访问会慢一些。
但现在有TLS 1.3,0-RTT握手,几乎没影响。
2. 要花钱
HTTPS需要证书,以前很贵。
现在有Let's Encrypt等免费CA,证书基本不要钱。
3. 不是100%安全
HTTPS只加密传输过程,但如果:
- 服务器被黑客攻破
- 用户中了木马
- 用了弱密码
——一样完蛋。
HTTPS不是万能的,但它让"偷看"变得几乎不可能。
总结:HTTP vs HTTPS
| \ | HTTP | HTTPS |
|---|---|---|
| 传输方式 | 明文 | 加密 |
| 加密算法 | 无 | RSA + AES |
| 速度 | 快 | 稍慢 |
| 安全性 | 裸奔 | 穿盔甲 |
| 证书 | 不需要 | 需要CA颁发 |
| 端口 | 80 | 443 |
| 用途 | 不涉及隐私的页面 | 登录、支付、敏感操作 |
写在最后
现在你应该懂了:
- HTTP = 明信片,谁都能看
- HTTPS = 带锁的盒子,只有你能开
- RSA = 一把锁配两把钥匙,用来安全地送"钥匙"
- AES = 用"钥匙"快速加密大量数据
- 证书 = 身份证,证明"服务器是服务器"
下次看到浏览器显示"不安全",就别在上边输密码了。
看到"安全",也不是100%安全——但至少,不会"裸奔"了。