前言
在互联网的“丛林”中,HTTP 的明文传输就像是在大街上裸奔,任何人(中间人、运营商)都能轻易窥探或篡改你的信息。为了解决安全问题,HTTPS 应运而生。它不是新协议,而是 HTTP + SSL/TLS 的结合体,它的默认端口号为443。
一、 为什么 HTTP 不安全?
背景: HTTP 数据以明文形式在网络路由器、交换机之间跳跃。
- 窃听风险:黑客可以截获你的账号密码。
- 篡改风险:你请求的是 A 页面,中间人可以给你插播广告或替换成 B 页面(劫持)。
二、 核心原理:加密方式的博弈
HTTPS 的本质是保护密钥。它巧妙地结合了两种加密方式:
1. 对称加密(传输效率高)
- 概念:服务器和客户端加密和解密使用同一个密钥。
- 困境:如何安全地把密钥交给对方?如果在网络中直接发送密钥,黑客截获后,后续所有加密都形同虚设。
2. 非对称加密(安全性高)
- 概念:使用一对配对的密钥——公钥(Public Key)和私钥(Private Key) 。
- 逻辑:公钥加密的数据,只有私钥能解;私钥加密的数据,只有公钥能解。
- 使用方法:先服务器会将生成的公钥发送给客户端,自己保留着私钥,客户端得到公钥后就可以使用公钥来加密信息,服务器端收到加密信息后就可以使用私钥来解密信息。
- 缺陷:
- 在这个过程中,按照一般的黑客攻击方式,即使黑客获取了公钥,没有私钥的话,也破解不了客户端发送的信息。
- 但是会存在另外一种黑客攻击方式,就是黑客在服务器发送公钥给客户端时,黑客可以中途截取这个公钥,然后黑客自己可以生成一对公私钥,然后将黑客生成的公钥发送给客户端,这时客户端并不知道自己收到的公钥是黑客仿造的,因此它会用黑客生成的公钥来加密信息,这时黑客可以在中途将这个加密信息给获取了,并使用自己生产的私钥来解密这个信息,这样就可以得到客户端发送的信息了。然后再将这个信息通过服务器原本发送的公钥进行加密,再发送给客户端,这样请求信息在黑客眼中就是完全透明的
3. 对称加密与非对称加密需要解决的问题
- 客户端如何判断发送给它的信息是否被修改了,为了解决这个问题,Https就引入看数字签名
- 客户端如何确定这个公钥不是黑客伪造的,为了解决这个问题,Https就引入看证书机制
三、 信任的基石:数字证书与签名
为了防止黑客在传输公钥时“掉包”,HTTPS 引入了 CA 证书(数字证书认证机构认证) 。
1. 证书机制 (Certificate)
服务器不再直接发公钥,而是发一个由权威机构背书的“身份证”——数字证书。
- 包含内容:服务器公钥、证书持有者信息、有效期、发布机构等。
- 防伪关键:黑客无法伪造证书,因为客户端(浏览器)内置了权威 CA 的公钥,可以验证证书的真实性。
2. 数字签名 (Digital Signature)
数字签名确保了证书内容没有被中途篡改。
- 生成:服务端将信息进行 Hash 运算得到“摘要”,再用 CA 的私钥对摘要加密,生成签名。
- 校验:
- 首先服务端会对要发送的信息进行哈希运算,生成一个hash值,然后服务端会使用私钥对这个hash值进行加密生成一个数字签名,并将这个签名发送给客户端。
- 客户端收到信息后,会使用接收到的公钥对数字签名进行解密,得到一个消息摘要hash1。
- 接着客户端会对接收到解码消息进行哈希运算得hash2,然后对比这两个hash值是否相等,如果相等则证明信息没有被修改。
四、 HTTPS 的完整通信逻辑(混合加密)
在Https中为对称加密消耗的资源远远低于非对称加密,如果客户端和服务器之间传输的数据量很大,且都使用非对称加密的话,整体的传输速度就会很慢。所以HTTPS 并没有全程使用非对称加密,而是采用了非对称加密传递密钥与对称加密传输数据混合使用的策略:
-
握手阶段(非对称加密) :
- 客户端获取服务器证书,验证通过后拿到公钥。
- 客户端生成一个随机数(对称密钥) ,用公钥加密后传给服务器。
- 服务器用私钥解密,得到这个对称密钥。
-
传输阶段(对称加密) :
- 双方现在都拥有了同一个对称密钥,后续的所有数据交互都用它来加密。
五、 HTTP vs HTTPS 核心区别
| 特性 | HTTP | HTTPS |
|---|---|---|
| 安全性 | 明文传输,不安全 | 加密传输,安全 |
| 默认端口 | 80 | 443 |
| 证书需求 | 无需证书 | 需要 CA 机构颁发的 SSL 证书 |
| 性能 | 较快(无需握手加密) | 略慢(需 SSL 握手,消耗 CPU) |
| SEO | 权重普通 | 搜索引擎优先收录 HTTPS 页面 |