HTTPS 证书交换流程

HTTPS 的密钥交换过程是基于 TLS(Transport Layer Security)协议实现的,其核心目标是通过加密和认证机制确保通信双方的安全性。以下是详细的 HTTPS 密钥交换过程的时序图,包括具体加密算法和细节。


HTTPS 密钥交换过程详细时序图

Client Server ClientHello 包含以下内容: - 支持的 TLS 版本 (如 TLS 1.3) - 支持的加密套件列表 (Cipher Suites) - 随机数 (ClientRandom) - 扩展信息 (如 SNI) ServerHello 包含以下内容: - 选定的加密套件 (如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) - 随机数 (ServerRandom) - 服务器证书 (包含公钥) - 可选的 ServerKeyExchange (ECDHE 参数) - ServerHelloDone ClientKeyExchange 客户端发送自己的公钥 (ClientPublicKey) ServerKeyExchange 服务器发送自己的公钥 (ServerPublicKey) 双方计算共享密钥 (SharedSecret): - 客户端: SharedSecret = EllipticCurveMultiply(ServerPublicKey, ClientPrivateKey) - 服务器: SharedSecret = EllipticCurveMultiply(ClientPublicKey, ServerPrivateKey) 使用 PRF 生成会话密钥: MasterSecret = PRF(Pre-MasterSecret, "master secret", ClientRandom + ServerRandom) SessionKeys = PRF(MasterSecret, "key expansion", ClientRandom + ServerRandom) Finished 包含握手消息的哈希值 (使用会话密钥加密) Finished 包含握手消息的哈希值 (使用会话密钥加密) Encrypted Application Data Encrypted Application Data Client Server

1. 客户端发起连接请求

客户端向服务器发送一个 ClientHello 消息,包含以下内容:

  • 支持的 TLS 版本(如 TLS 1.2 或 TLS 1.3)。

  • 支持的加密套件列表(Cipher Suites),例如:

    • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(ECDHE 密钥交换 + RSA 认证 + AES 加密)。
  • 随机数 ClientRandom(用于后续密钥生成)。

  • 可选的扩展信息(如支持的压缩方法、SNI 等)。

    Client -> Server: ClientHello
    TLS Version: TLS 1.3
    Cipher Suites: [TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, ...]
    Random: ClientRandom
    Extensions: [SNI, Supported Groups, Signature Algorithms, ...]


2. 服务器响应

服务器收到 ClientHello 后,选择合适的加密套件,并返回 ServerHello 消息,包含以下内容:

  • 选定的加密套件(如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)。

  • 随机数 ServerRandom(用于后续密钥生成)。

  • 服务器证书(包含公钥,用于身份验证)。

  • 可选的 ServerKeyExchange 消息(在某些情况下需要,例如使用 DHE 或 ECDHE 密钥交换时)。

  • 可选的 CertificateRequest 消息(如果需要客户端认证)。

  • ServerHelloDone 消息(表示服务器完成初始握手消息)。

    Server -> Client: ServerHello
    Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    Random: ServerRandom
    Certificate: ServerCert (包含公钥)
    ServerKeyExchange: (可选,ECDHE 参数)
    ServerHelloDone


3. 密钥交换(ECDHE 示例)

在此阶段,客户端和服务器通过密钥交换算法(如 ECDHE)协商出共享密钥(Pre-Master Secret)。以下是 ECDHE 的具体步骤:

3.1 客户端生成 ECDHE 参数

客户端根据服务器提供的椭圆曲线参数(如 secp256r1),生成自己的临时私钥和公钥:

  • 客户端私钥:ClientPrivateKey
  • 客户端公钥:ClientPublicKey = EllipticCurveMultiply(BasePoint, ClientPrivateKey)

客户端将 ClientPublicKey 发送给服务器。

复制代码
Client -> Server: ClientKeyExchange
    Public Key: ClientPublicKey
3.2 服务器生成 ECDHE 参数

服务器同样生成自己的临时私钥和公钥:

  • 服务器私钥:ServerPrivateKey
  • 服务器公钥:ServerPublicKey = EllipticCurveMultiply(BasePoint, ServerPrivateKey)

服务器将 ServerPublicKey 发送给客户端。

复制代码
Server -> Client: ServerKeyExchange
    Public Key: ServerPublicKey
3.3 计算共享密钥

客户端和服务器分别使用对方的公钥和自己的私钥计算共享密钥:

  • 客户端计算:SharedSecret = EllipticCurveMultiply(ServerPublicKey, ClientPrivateKey)
  • 服务器计算:SharedSecret = EllipticCurveMultiply(ClientPublicKey, ServerPrivateKey)

由于椭圆曲线的数学特性,双方计算出的 SharedSecret 是相同的。


4. 生成会话密钥

客户端和服务器使用以下信息生成会话密钥(Master Secret 和对称加密密钥):

  • ClientRandom(客户端随机数)。
  • ServerRandom(服务器随机数)。
  • Pre-Master Secret(通过密钥交换算法协商出的共享密钥)。

通过伪随机函数(PRF,Pseudo-Random Function),生成以下密钥:

  • 加密密钥:用于对称加密(如 AES)。

  • MAC 密钥:用于消息完整性校验(如 HMAC)。

  • IV:用于分组加密模式(如 AES-GCM)。

    MasterSecret = PRF(Pre-MasterSecret, "master secret", ClientRandom + ServerRandom)
    SessionKeys = PRF(MasterSecret, "key expansion", ClientRandom + ServerRandom)


5. 完成握手

客户端和服务器交换 Finished 消息,验证握手过程是否成功:

  • 客户端发送 Finished 消息,包含握手消息的哈希值(使用会话密钥加密)。

  • 服务器验证客户端的 Finished 消息。

  • 服务器发送自己的 Finished 消息,客户端验证。

    Client -> Server: Finished
    Encrypted Hash: HMAC(SessionKeys, HandshakeMessages)

    Server -> Client: Finished
    Encrypted Hash: HMAC(SessionKeys, HandshakeMessages)


6. 应用层数据传输

握手完成后,客户端和服务器使用协商出的会话密钥进行对称加密通信。

复制代码
Client <-> Server: Encrypted Application Data

关键加密算法和细节

步骤 加密算法/技术 描述
密钥交换 ECDHE(Elliptic Curve Diffie-Hellman) 使用椭圆曲线密码学生成共享密钥,提供前向安全性(Forward Secrecy)。
身份认证 RSA 或 ECDSA 服务器证书中的公钥用于验证服务器身份。
对称加密 AES-128-GCM 使用 AES 加密算法保护应用层数据,GCM 提供加密和完整性保护。
哈希函数 SHA-256 用于生成消息摘要和伪随机函数(PRF)。
消息完整性 HMAC 使用 HMAC 算法验证消息完整性。

总结

HTTPS 密钥交换的核心是通过非对称加密(如 ECDHE)协商共享密钥,并使用对称加密(如 AES)保护实际数据传输。整个过程涉及多个加密算法和技术,确保了通信的机密性、完整性和身份认证。

相关推荐
大面积秃头38 分钟前
Http基础协议和解析
网络·网络协议·http
软件技术员4 小时前
使用ACME自动签发SSL 证书
服务器·网络协议·ssl
我也要当昏君4 小时前
6.4 电子邮件 (答案见原书 P284)
网络协议
せいしゅん青春之我6 小时前
[JavaEE初阶]网络协议-状态码
java·网络协议·http
小蝈蝈啊7 小时前
HTTP相关知识点
网络协议·http·iphone
せいしゅん青春之我8 小时前
[JavaEE初阶]HTTPS-SSL传输过程中的加密
https·java-ee·ssl
任性不起来了8 小时前
宝塔面板点击ssl证书报错:出错了,面板运行时发生错误!ModuleNotFoundError: No module named ‘OpenSSL‘
网络·网络协议·ssl
2501_9160074719 小时前
iOS 混淆工具链实战,多工具组合完成 IPA 混淆与加固(iOS混淆|IPA加固|无源码混淆|App 防反编译)
android·ios·小程序·https·uni-app·iphone·webview
stark张宇19 小时前
网络排错全流程:从DNS解析到防火墙,逐层拆解常见问题
linux·网络协议·dns