HTTP和HTTPS两者核心的区别在于安全性
HTTPS在HTTP的基础上通过 加密、身份验证和数据完整性保护,解决了HTTP的明文传输风险
HTTP和HTTPS核心区别
| 特性 | HTTP | HTTPS |
|---|---|---|
| 协议层 | 应用层协议 | HTTP + SSL/TLS(传输层安全协议) |
| 默认端口 | 80 | 443 |
| 数据传输方式 | 明文传输(未加密) | 加密传输(SSL/TLS加密) |
| 安全性 | 低(易被窃听、篡改、伪装) | 高(防窃听、防篡改、身份验证) |
| 性能开销 | 低 | 略高(加密/解密消耗CPU资源) |
| SEO优化 | 无优势 | 被搜索引擎(如Google)优先收录 |
| 浏览器标识 | 地址栏显示“不安全” | 地址栏显示“🔒安全” |
HTTPS的改进方案
1. 加密传输
实现方式: 在握手阶段采用非对称加密,在后续通信期间采用堆成加密(性能更高)
目的: 防止数据在传输过程中被窃听,保护敏感信息
2. 安全握手
TLS握手
客户端发起连接(Client Hello)
发送支持的TLS版本、加密套件(Cipher Suites)、随机数(Client Random)。
- 关键扩展:
-
supported_groups:支持的密钥交换算法(如ECDHE)。key_share:客户端预生成的公钥参数(加速密钥交换)。
服务器响应(Server Hello)
选择加密套件(如TLS_AES_256_GCM_SHA384),发送随机数(Server Random)。
- 关键操作:
-
- 发送数字证书(包含服务器公钥)。
- 使用
key_share扩展返回服务器公钥参数。 - 签名验证(证明服务器拥有私钥)。
密钥交换与计算
客户端和服务器通过ECDHE算法生成共享密钥(Pre-Master Secret)。
结合Client Random、Server Random和Pre-Master Secret,生成主密钥(Master Secret) ,最终导出会话密钥(Session Key)。
完成握手
双方切换加密模式,使用会话密钥加密后续通信。
验证握手消息的完整性(防止篡改)。
3. 身份验证
实现方式: 服务器需向客户端提供数字证书(由受信任的证书颁发鸡头签发)
目的: 确保用户访问的是真实网站,验证服务器身份,防止中间人攻击
4. 数据完整性
实现方式: 使用 消息认证码或哈希算法生成数据摘要,接收方验证摘要是否匹配
目的: 防止传输过程中数据被篡改
HTTPS解决的场景问题
1. 防窃听
HTTP风险:明文传输的数据可被网络中间节点(如路由器、ISP)截获。
HTTPS方案:加密后数据为密文,即使被截获也无法解密。
2. 防篡改
HTTP风险:攻击者可修改响应内容(如插入恶意脚本)。
HTTPS方案:数据完整性校验使篡改行为可被检测。
3. 防伪装(中间人攻击)
HTTP风险:攻击者伪造服务器(如DNS劫持)。
HTTPS方案:证书验证确保通信对方身份合法。
4. 合规性
场景:支付系统(PCI DSS)、用户隐私(GDPR)等法规要求必须使用HTTPS。
TLS是什么
TLS(Transport Layer Security)传输层安全协议
是一种加密协议,用于在网络通信中提供数据加密,身份验证和完整性保护,是互联网安全的基石
| 协议 | 安全性 | 性能 | 应用场景 |
|---|---|---|---|
| SSL 3.0 | 已淘汰(存在POODLE) | 低 | 无,建议禁用 |
| TLS 1.2 | 高(需配置强套件) | 中等 | 广泛支持 |
| TLS 1.3 | 最高(默认安全) | 高(0-RTT) | 现代浏览器和服务端 |
TLS的核心目标
保密性(Confidentiality)
通过加密防止数据被窃听。
完整性(Integrity)
检测数据是否被篡改。
身份认证(Authentication)
验证通信双方的身份,防止中间人攻击。
前向保密(Forward Secrecy)
即使长期密钥泄露,历史会话仍安全。