HTTP vs HTTPS:安全连接的底层逻辑


在互联网上,数据传输的安全性至关重要。HTTP 与 HTTPS 的核心区别在于一个“S”(Secure),而这个安全性的背后是复杂的加密技术和协议握手。

HTTP 与 HTTPS 的核心差异

特性HTTPHTTPS
安全性明文传输,易被窃听和篡改加密传输,具有机密性、完整性
默认端口80443
底层协议TCPTCP + SSL/TLS
证书要求无需证书需要向 CA 机构申请 SSL 证书

HTTPS 的安全支柱

HTTPS 能够保证安全,主要依赖于以下三个特性:

  1. 机密性 (Confidentiality):通过对称加密对传输的数据进行加密,防止被第三方窃听。
  2. 完整性 (Integrity):通过数字签名 (MAC) 确保数据在传输过程中不被恶意篡改。
  3. 身份验证 (Authentication):通过 CA 数字证书 验证服务器的身份,防止“中间人攻击”。

核心重点:HTTPS 握手过程 (TLS 1.2 为例)

为了在不可靠的网络中安全地交换“对称密钥”,HTTPS 使用了非对称加密。这个过程被称为 SSL/TLS 握手:

第一阶段:明文协商 (Client Hello)

注意:此阶段是明文传输的。 客户端向服务器发送请求,提供以下信息:

  • 客户端支持的 TLS 版本、密码套件列表。
  • 客户端随机数 (Client Random):明文传输。

第二阶段:服务器回应与证书 (Server Hello)

此阶段依然是明文传输。 服务器确认加密细节,并返回:

  • 选定的 TLS 版本、加密算法以及 服务器随机数 (Server Random)
  • 数字证书 (Certificate):包含服务器的公钥
  • 为什么证书是安全的? 虽然证书是明文传输的,但它包含了 CA(证书颁发机构)的数字签名。客户端会使用内置在浏览器中的 CA 公钥去验证签名。如果签名验证通过,客户端就能确定:这个公钥确实属于该服务器,没有被篡改。

第三阶段:非对称加密的关键 (Key Exchange)

这是安全性发生质变的一步:

  1. 生成预主密钥 (Pre-master Secret):客户端在本地生成一个全新的随机数。
  2. 公钥加密:客户端取出证书中的服务器公钥,将预主密钥进行加密。
  3. 发送加密包:将加密后的密文发送给服务器。
  • 细节: 即使黑客截获了这个包,由于他没有服务器的私钥,他也无法解密出其中的预主密钥。只有拥有私钥的服务器才能解密出这个随机数。

第四阶段:计算会话密钥

此时,客户端和服务器都拥有了三个参数:Client Random + Server Random + Pre-master Secret

  • 由于 Pre-master Secret 的交换是受非对称加密保护的,黑客无法凑齐这三个参数。
  • 双方各自通过这三个参数计算出同一个 会话密钥 (Session Key)
  • 此时开始,双方切换为对称加密模式。

第五阶段:握手完成

  1. 客户端发送 Change Cipher Spec,告诉服务器:“以后我们就用这个会话密钥加密了”。
  2. 服务器同样回复确认。握手结束,开始安全传输数据。

为什么不一直使用非对称加密?

你可能会问:既然非对称加密(公钥/私钥)那么安全,为什么不直接用它传输所有数据?

  • 性能差距:非对称加密涉及复杂的数学运算(大数分解等),处理速度比对称加密慢几个数量级(约 100~1000 倍)。
  • 混合加密方案:HTTPS 采用了“混合加密”:
    • 使用非对称加密来安全地交换对称密钥(即上述握手阶段)。
    • 交换完成后,使用高效的对称加密来传输实际业务数据。

总结

HTTPS 不是一种全新的协议,而是 HTTP on SSL/TLS。通过 CA 证书解决了“服务器是谁”的问题,通过非对称加密解决了“如何安全交换钥匙”的问题,最后通过对称加密解决了“大数据量高效传输”的问题。