Skip to content

HTTP 与 HTTPS 区别

一、HTTP 与 HTTPS 有哪些区别?

HTTPS = HTTP + TLS/SSL 加密层,即"在 HTTP 之下、TCP 之上"插入一层安全协议,对 HTTP 的报文进行加密后再通过 TCP 传输。

对比项HTTPHTTPS
全称超文本传输协议超文本传输安全协议(HTTP over TLS)
端口80443
传输层之上直接 TCPTCP + TLS/SSL 加密层
安全性明文传输,易被窃听、篡改、冒充加密传输,防窃听/篡改/冒充
证书不需要需要 CA 颁发的数字证书
握手开销无额外握手需 TLS 握手(增加 RTT 延迟)
性能略快略慢(加解密、握手),但影响很小
SEO普通搜索引擎优先(Google/百度加权)
计费/监管国内建站需 ICP 备案,部分场景强制 HTTPS

注意:HTTPS 不是独立于 HTTP 的新协议,应用层语义(方法、状态码、头部)完全一致,只是传输过程被加密了。


二、HTTPS 解决了 HTTP 的哪些问题?

HTTP 是明文协议,存在三大安全威胁,HTTPS 通过 TLS 一一对应解决:

1. 窃听(信息泄漏)→ 加密

  • 问题:HTTP 数据在链路上明文传输,中间人(路由器、代理、公共 Wi-Fi)可轻易抓包读取账号、密码、Cookie。
  • 解决:HTTPS 用对称加密加密业务数据,密钥通过握手安全协商,第三方无法解密。

2. 篡改(数据被修改)→ 完整性校验

  • 问题:中间人可插入广告、篡改页面内容、修改响应(如注入恶意脚本)。
  • 解决:TLS 用 MAC(消息认证码)/ AEAD 校验每一条记录的完整性,数据被改会被立即发现并丢弃。

3. 冒充(身份伪造)→ 身份认证

  • 问题:攻击者可以伪造一个假网站(如仿冒银行页面)骗取用户信息(钓鱼)。
  • 解决:HTTPS 依赖 CA 数字证书验证服务器身份,浏览器确认证书可信且域名匹配后才建立连接。

一句话:HTTPS 提供了机密性(加密)、完整性(校验)、真实性(身份认证)三大保障。

补充:HTTPS 还能防重放攻击(通过序号/Nonce 机制)和降级攻击(通过 TLS 版本协商与扩展)。


三、HTTPS 是如何建立连接的?其间交互了什么?

HTTPS 连接建立分两个阶段:TCP 三次握手(建立可靠传输)+ TLS 握手(协商密钥、验证身份)。下面以最常见的 TLS 1.2(RSA 密钥交换)TLS 1.3 思路说明。

整体交互流程

客户端                                    服务器
  |                                         |
  |  ===== TCP 三次握手 =====               |
  |  ---- SYN ------------------------->    |
  |  <--- SYN + ACK -------------------     |
  |  ---- ACK ------------------------->    |
  |                                         |
  |  ===== TLS 握手 =====                   |
  |  ---- Client Hello ----------------->   |  ① 支持的 TLS 版本、密码套件列表、客户端随机数
  |                                         |
  |  <--- Server Hello -----------------    |  ② 选定的版本/套件、服务器随机数
  |  <--- Certificate ------------------    |  ③ 服务器数字证书(含公钥)
  |  <--- Server Key Exchange ---------     |  ④ (DH 类) 服务器公钥参数
  |  <--- Server Hello Done ------------    |
  |                                         |
  |  ---- Client Key Exchange --------→    |  ⑤ 用证书公钥加密「预主密钥」(RSA) 或发公钥参数 (DH)
  |  ---- Change Cipher Spec --------→      |  ⑥ 通知:之后用协商密钥加密
  |  ---- Finished (加密) ------------→     |  ⑦ 校验握手完整性
  |                                         |
  |  <--- Change Cipher Spec ---------      |
  |  <--- Finished (加密) -------------     |  ⑧ 服务器同样确认
  |                                         |
  |  ===== 应用数据(对称加密传输)=====     |
  |  <--- 加密的 HTTP 响应 -----------      |

关键交互步骤说明

① Client Hello(客户端 → 服务器)

  • 客户端随机数 Client Random
  • 支持的 TLS 版本、密码套件(Cipher Suites)列表
  • 支持的压缩方法、扩展(如 SNI)

② Server Hello(服务器 → 客户端)

  • 服务器随机数 Server Random
  • 从客户端列表中选定的 TLS 版本、密码套件

③ Certificate(服务器 → 客户端)

  • 服务器发送 X.509 数字证书,内含服务器公钥和域名信息。
  • 客户端据此验证:证书是否由可信 CA 签发、是否在有效期、域名是否匹配、是否吊销(OCSP/CRL)。

④ / ⑤ 密钥交换

  • RSA 方式:客户端生成 Pre-Master Secret,用证书里的服务器公钥加密后发送;服务器用私钥解密。双方再用 Client Random + Server Random + Pre-Master 派生出相同的会话密钥(对称密钥)
  • DH/ECDHE 方式(更优,支持前向安全):双方交换公开参数,各自计算出相同的预主密钥,私钥不传输。即使服务器私钥日后泄露,历史通信也无法被解密(前向保密 PFS)。

⑥ / ⑦ / ⑧ Change Cipher Spec 与 Finished

  • 双方约定切换为对称加密。
  • Finished 消息用新密钥加密,包含之前所有握手消息的 MAC,用于校验握手过程未被篡改。

最终产出的密钥

握手完成后,双方得到相同的对称会话密钥,后续 HTTP 请求/响应都用它加解密(如 AES-GCM)。对称加密性能高,适合大量数据传输;非对称加密只用在建握手阶段,兼顾安全与效率。


四、TLS 1.2 与 TLS 1.3 的握手差异

对比项TLS 1.2TLS 1.3
握手往返2-RTT(含证书)1-RTT;重连可 0-RTT
密钥交换RSA / DH 都支持(RSA 无前向安全)仅 ECDHE(强制前向安全)
密码套件多种,含弱算法精简,移除 RSA 密钥交换、RC4、CBC 等弱算法
加密阶段Change Cipher Spec 后才加密早期数据即加密,更安全
性能较慢更快

五、核心概念小结

  • 对称加密:加密解密用同一把密钥(如 AES),快,但密钥分发困难。
  • 非对称加密:公钥加密、私钥解密(如 RSA/ECDHE),慢,用于安全协商密钥和证书签名。
  • 数字证书 / CA:CA 用私钥给服务器公钥签名,客户端用 CA 公钥验证,形成信任链。
  • 前向保密(PFS):每次会话用独立临时密钥,长期私钥泄露也不影响历史通信。

一句话记忆:HTTP 明文裸奔,HTTPS 靠 TLS 加密 + 证书认证;连接建立先 TCP 握手再 TLS 握手,握手用非对称加密安全协商出对称密钥,之后全程对称加密传输。

最近更新