HTTPS 详细介绍

HTTPS(超文本传输协议安全版,Hypertext Transfer Protocol Secure)是HTTP的加密版本,通过在HTTP和传输层之间引入SSL/TLS(安全套接字层/传输层安全协议)提供安全性。HTTPS旨在确保数据传输的保密性完整性身份验证,广泛应用于需要保护用户数据的场景,如在线银行、电子商务和敏感信息传输。


HTTPS 与 HTTP 的不同

  1. 加密
    • HTTP:数据以明文传输,容易被拦截和篡改。
    • HTTPS:通过SSL/TLS加密数据,保护通信内容,防止窃听和中间人攻击。
  2. 安全性
    • HTTP:无身份验证,客户端无法确认服务器身份,易受DNS劫持或伪造服务器攻击。
    • HTTPS:通过SSL/TLS证书验证服务器身份,确保通信对象可信。
  3. 默认端口
    • HTTP:默认使用80端口。
    • HTTPS:默认使用443端口。
  4. 协议栈
    • HTTP:直接运行在TCP之上。
    • HTTPS:在HTTP和TCP之间加入SSL/TLS层,HTTP消息通过SSL/TLS加密后在TCP上传输。
  5. 性能开销
    • HTTP:无加密,传输速度较快,但不安全。
    • HTTPS:加密和解密需要计算资源,握手过程增加延迟,但现代优化(如TLS 1.3、会话复用)已显著降低开销。
  6. SEO 和浏览器支持
    • HTTP:现代浏览器可能标记为“不安全”,影响用户信任和搜索引擎排名。
    • HTTPS:被搜索引擎(如Google)优先排名,浏览器显示安全锁图标,增强用户信任。

SSL/TLS 握手过程

SSL/TLS握手是建立HTTPS连接的核心步骤,用于协商加密算法、交换密钥并验证身份。以下是TLS 1.2和TLS 1.3的握手过程对比,重点介绍TLS 1.3(现代标准,性能更优)。

TLS 1.3 握手过程

TLS 1.3简化了握手流程,减少了往返时间(RTT),通常在1-RTT内完成(支持0-RTT的场景更高效)。以下是详细步骤:

  1. Client Hello
    • 客户端发送消息,包含:
      • 支持的TLS版本(例如TLS 1.3)。
      • 支持的加密套件(如TLS_AES_256_GCM_SHA384)。
      • 客户端生成的随机数(Client Random)。
      • 密钥共享信息(通常是Diffie-Hellman参数或椭圆曲线参数,用于生成共享密钥)。
      • 可选的会话ID或会话票据(用于会话复用)。
      • 扩展字段(如SNI,服务器名称指示,用于虚拟主机)。
  2. Server Hello
    • 服务器响应,包含:
      • 选定的TLS版本和加密套件。
      • 服务器生成的随机数(Server Random)。
      • 服务器的密钥共享信息(完成Diffie-Hellman密钥交换)。
      • 服务器证书(包含公钥和身份信息,由受信任的CA签名)。
      • 可选的会话票据(用于未来会话复用)。
  3. 密钥计算与验证
    • 客户端和服务器使用交换的密钥共享信息计算共享密钥(通过Diffie-Hellman或椭圆曲线算法)。
    • 客户端验证服务器证书(检查CA签名、证书链、域名匹配等)。
    • 双方生成会话密钥,用于加密后续通信。
  4. Finished 消息
    • 客户端和服务器分别发送Finished消息,包含基于共享密钥的校验值,确认握手完整性。
    • 握手完成后,双方开始加密通信。
  5. 0-RTT(可选)
    • 如果客户端之前与服务器建立了会话(通过会话票据),可在Client Hello中直接发送加密数据(0-RTT模式)。
    • 服务器使用存储的会话密钥解密数据,减少握手时间。
    • 注意:0-RTT数据可能面临重放攻击风险,需谨慎使用。