HTTPS是如何加密的?

HTTPS通过SSL/TLS协议实现加密通信,其加密流程可分为五个核心阶段,以下用技术细节与协议交互过程说明:


**1. 非对称加密建立信任**

**证书验证流程:**
  1. 服务器发送包含公钥的SSL证书(X.509标准格式)
Certificate Structure:
- Version: v3
- Subject: CN=www.example.com
- Issuer: C=US, O=Let's Encrypt
- Validity: 2023-01-01 to 2024-01-01
- Public Key: RSA 2048bit
- Signature: sha256WithRSAEncryption
  1. 客户端校验证书链:
    • 根CA证书预置在操作系统信任库(如VeriSign Class 3)
    • 中间CA证书链式验证
  2. OCSP实时验证证书吊销状态(替代CRL)

**2. 密钥协商(TLS Handshake)**

**协议交互过程:**
ClientHello ->
  TLS Version: TLS 1.2
  Cipher Suites: 
    TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  Random: 5b7d...c2a3 (32字节)
  Session ID: (空)

ServerHello <-
  Selected Cipher Suite: 
    TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  Random: 801f...9d4b (32字节)
  Session ID: 7a3c...f8d2

关键步骤:

  • ECDHE算法生成临时密钥对(前向保密)
  • 客户端生成premaster secret并用服务器公钥加密
premaster_secret = PRF(client_random + server_random)
encrypted_premaster = RSA_Encrypt(server_pub_key, premaster_secret)

**3. 对称密钥生成**

**密钥派生过程:**
master_secret = PRF(
  premaster_secret, 
  "master secret", 
  client_random + server_random,
  48字节
)

key_block = PRF(
  master_secret,
  "key expansion",
  server_random + client_random,
  40字节
)

# 分割为实际密钥:
client_write_MAC_key = key_block[0:19]
server_write_MAC_key = key_block[20:39]
client_write_key = key_block[40:55]  # AES-128密钥
server_write_key = key_block[56:71]

**4. 数据加密传输**

**记录层协议处理:**
struct {
  ContentType type;  // application_data(23)
  ProtocolVersion version;
  uint16 length;
  opaque fragment[TLSPlaintext.length];
} TLSPlaintext;

// 加密过程:
TLSCiphertext = AES-128-GCM_Encrypt(
  client_write_key,
  nonce,
  TLSPlaintext.fragment + HMAC_SHA256
)

**5. 完整性验证**

**HMAC计算与验证:**
hmac = HMAC-SHA256(
  key=client_write_MAC_key,
  data=seq_num + TLSPlaintext.type + TLSPlaintext.version + length + fragment
)

# 接收方验证:
if hmac != received_hmac:
    raise BadRecordMacAlert

**防御对抗技术**

1. **HSTS头强制HTTPS** `Strict-Transport-Security: max-age=31536000; includeSubDomains` 2. **证书透明化**(Certificate Transparency) 监控异常证书签发 3. **AEAD加密模式** 采用AES-GCM/ChaCha20-Poly1305防篡改

与传统HTTP对比:

安全特性 HTTP HTTPS
数据加密 明文传输 AES-128/256
身份验证 CA证书体系
完整性保护 HMAC/SHA256
防重放攻击 脆弱 序列号+随机数

通过四次握手建立安全通道(TCP三次握手+TLS握手),将传统HTTP的500ms延迟增加至800-1200ms(可通过TLS1.3优化至1-RTT)。

你可能感兴趣的:(https,网络协议,http)