mbedtls库ssl/tls握手

        本文转发来自:网络 | HTTPS 完整流程 - Cor - 博客园

一、握手过程

1.1 TLS 完整握手过程

1.2 单项认证数据

TLSv1.2	571	Client Hello
TLSv1.2	150	Server Hello
TLSv1.2	895	Certificate
TLSv1.2	392	Server Key Exchange
TLSv1.2	63	Server Hello Done
TLSv1.2	180	Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
TLSv1.2	60	Change Cipher Spec
TLSv1.2	99	Encrypted Handshake Message
TLSv1.2	406	Application Data
TLSv1.2	328	Application Data

1.3 双向认证数据

TLSv1.2	358	Client Hello
TLSv1.2	996	Server Hello, Certificate, Server Key Exchange, Certificate Request, Server Hello Done
TLSv1.2	534	Certificate
TLSv1.2	332	Client Key Exchange, Certificate Verify, Change Cipher Spec, Encrypted Handshake Message
TLSv1.2	60	Change Cipher Spec
TLSv1.2	99	Encrypted Handshake Message
TLSv1.2	115	Application Data

二、包详细信息(抓包信息 From:WireShark)

1. Client Hello

资源路径:

Source: library/ssl_cli.c;
Func:   ssl_write_client_hello();

握手协议:

Handshake Protocol: Client Hello
    Handshake Type: Client Hello (1)
    Length: 295
    Version: TLS 1.2 (0x0303)
    Random: 5f2933702428c5b2819c30feb9fc52b3483feedd7faf64c2…
        GMT Unix Time: Aug  4, 2020 18:07:44.000000000 CST
        Random Bytes: 2428c5b2819c30feb9fc52b3483feedd7faf64c22162e198…
    Session ID Length: 0
    Cipher Suites Length: 160
    Cipher Suites (80 suites)
    Compression Methods Length: 1
    Compression Methods (1 method)
    Extensions Length: 94
    Extension: server_name (len=18)
    Extension: signature_algorithms (len=22)
    Extension: supported_groups (len=24)
    Extension: ec_point_formats (len=2)
    Extension: encrypt_then_mac (len=0)
    Extension: extended_master_secret (len=0)
    Extension: session_ticket (len=0)

函数说明:

Version: TLS 版本信息;
Random: 前四位:时间戳,后28位:随机数;
Cipher Suites: 客户端支持的组件;

2. Server Hello

资源路径:

Source: library/ssl_cli.c;
Func:   ssl_parse_server_hello();

握手协议:

Handshake Protocol: Server Hello
    Handshake Type: Server Hello (2)
    Length: 81
    Version: TLS 1.2 (0x0303)
    Random: 5f29336af1104faf18544577413080cb7f8932fd5c4d2249…
        GMT Unix Time: Aug  4, 2020 18:07:38.000000000 CST
        Random Bytes: f1104faf18544577413080cb7f8932fd5c4d2249fb8db872…
    Session ID Length: 32
    Session ID: 5f29336a02f78561926108084594d22cd6804819da2d9bd9…
    Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (0xc02c)
    Compression Method: null (0)
    Extensions Length: 9
    Extension: renegotiation_info (len=1)
        Type: renegotiation_info (65281)
        Length: 1
        Renegotiation Info extension
    Extension: extended_master_secret (len=0)
        Type: extended_master_secret (23)
        Length: 0

函数说明:

Version:      TLS 版本信息;
Random:       随机数序列,前四位:时间戳,后28位:随机数;
Cipher Suite: 服务端与客户端协商之后的密码套件;

3. Certificate

资源路径:

Source: library/ssl_cli.c;
Func:   mbedtls_ssl_parse_certificate();

握手协议:

Handshake Protocol: Certificate
    Handshake Type: Certificate (11)
    Length: 484
    Certificates Length: 481
    Certificates (481 bytes)
        Certificate Length: 478
        Certificate: 308201da30820180021475bda3ed4a9e4fcba43686b12069… (id-at-commonName=svr.example.iwall.com,id-at-organizationalUnitName=SERVER,id-at-organizationName=IWall,id-at-localityName=HaiDian,id-at-stateOrProvinceName=BeiJing,id-at-co
            signedCertificate
            algorithmIdentifier (ecdsa-with-SHA256)
            Padding: 0
            encrypted: 30450221009499d98c1ea5963eaba85216b98de2ff45f5af…

函数说明:

Version:      TLS 版本信息;
Certificates: 证书信息;

4. Server Key Exchange

资源路径:

Source: library/ssl_cli.c;
Func:   ssl_parse_server_key_exchange();

握手协议:

Handshake Protocol: Server Key Exchange
    Handshake Type: Server Key Exchange (12)
    Length: 211
    EC Diffie-Hellman Server Params
        Curve Type: named_curve (0x03)
        Named Curve: secp521r1 (0x0019)
        Pubkey Length: 133
        Pubkey: 04010a9d9275a1702a5eb822432c2f728e18613768c4818a…
        Signature Algorithm: ecdsa_secp521r1_sha512 (0x0603)
            Signature Hash Algorithm Hash: SHA512 (6)
            Signature Hash Algorithm Signature: ECDSA (3)
        Signature Length: 70
        Signature: 3044022031c64f7e6fe642e6729bdf1822e1345e24858e13…

函数说明:

EC Diffie-Hellman Server Params
Pubkey: 若使用 ECDH,客户端使用证书中的服务器公钥,服务端不发送 Server Key Exchange。
   		  若使用 ECDHE,服务器将通过 Server Key Exchange 消息告之客户端临时 ECDH 公钥,并使用服务器私钥		      对该临时公钥进行签名。
Signature Algorithm: 签名算法
Signature:           服务器私钥签名

5. Certificate Request

资源路径:

Source: library/ssl_cli.c;
Func:   ssl_parse_certificate_request();

握手协议:

Handshake Protocol: Certificate Request
    Handshake Type: Certificate Request (13)
    Length: 141
    Certificate types count: 3
    Certificate types (3 types)
        Certificate type: RSA Sign (1)
        Certificate type: DSS Sign (2)
        Certificate type: ECDSA Sign (64)
    Signature Hash Algorithms Length: 20
    Signature Hash Algorithms (10 algorithms)
        Signature Algorithm: ecdsa_secp521r1_sha512 (0x0603)
        Signature Algorithm: rsa_pkcs1_sha512 (0x0601)
        Signature Algorithm: ecdsa_secp384r1_sha384 (0x0503)
        Signature Algorithm: rsa_pkcs1_sha384 (0x0501)
        Signature Algorithm: ecdsa_secp256r1_sha256 (0x0403)
        Signature Algorithm: rsa_pkcs1_sha256 (0x0401)
        Signature Algorithm: SHA256 DSA (0x0402)
        Signature Algorithm: ecdsa_sha1 (0x0203)
        Signature Algorithm: rsa_pkcs1_sha1 (0x0201)
        Signature Algorithm: SHA1 DSA (0x0202)
    Distinguished Names Length: 113
    Distinguished Names (113 bytes)
        Distinguished Name Length: 111
        Distinguished Name: (id-at-commonName=ca.example.iwall.com,id-at-organizationalUnitName=CA,id-at-organizationName=IWall,id-at-localityName=HaiDian,id-at-stateOrProvinceName=BeiJing,id-at-countryName=CN)

6. Server Hello Done

资源路径:

Source: library/ssl_cli.c;
Func:   ssl_parse_server_hello_done();

握手协议:

Transport Layer Security
    TLSv1.2 Record Layer: Handshake Protocol: Server Hello Done
        Content Type: Handshake (22)
        Version: TLS 1.2 (0x0303)
        Length: 4
        Handshake Protocol: Server Hello Done
            Handshake Type: Server Hello Done (14)
            Length: 0

7. Certificate

资源路径:

Source: library/ssl_cli.c;
Func:   mbedtls_ssl_write_certificate();

握手协议:

TLSv1.2 Record Layer: Handshake Protocol: Certificate
    Content Type: Handshake (22)
    Version: TLS 1.2 (0x0303)
    Length: 475
    Handshake Protocol: Certificate
        Handshake Type: Certificate (11)
        Length: 471
        Certificates Length: 468
        Certificates (468 bytes)
            Certificate Length: 465
            Certificate: 308201cd30820172021475bda3ed4a9e4fcba43686b12069… (id-at-commonName=Android,id-at-organizationalUnitName=CLIENT,id-at-organizationName=IWall,id-at-localityName=HaiDian,id-at-stateOrProvinceName=BeiJing,id-at-countryName=CN)
                signedCertificate
                algorithmIdentifier (ecdsa-with-SHA256)
                Padding: 0
                encrypted: 3046022100d2ff654bad8f8c917bce6e61c7c0767c661cbf…

8. Client Key Exchange

资源路径:

Source: library/ssl_cli.c;
Func:   ssl_write_client_key_exchange();

握手协议:

TLSv1.2 Record Layer: Handshake Protocol: Client Key Exchange
    Content Type: Handshake (22)
    Version: TLS 1.2 (0x0303)
    Length: 70
    Handshake Protocol: Client Key Exchange
        Handshake Type: Client Key Exchange (16)
        Length: 66
        EC Diffie-Hellman Client Params
            Pubkey Length: 65
            Pubkey: 047b18a25c26f22f7cea0307b89dcb483167a9d3bdb21929…

9. Certificate Verify

资源路径:

Source: library/ssl_cli.c;
Func:   ssl_write_certificate_verify();

握手协议:

TLSv1.2 Record Layer: Handshake Protocol: Certificate Verify
    Content Type: Handshake (22)
    Version: TLS 1.2 (0x0303)
    Length: 79
    Handshake Protocol: Certificate Verify
        Handshake Type: Certificate Verify (15)
        Length: 75
        Signature Algorithm: ecdsa_secp384r1_sha384 (0x0503)
            Signature Hash Algorithm Hash: SHA384 (5)
            Signature Hash Algorithm Signature: ECDSA (3)
        Signature length: 71
        Signature: 3045022100c6a116675a6b42fef04d673fe305a6f961ff1e…

函数说明:

Signature: 签名,使用客户端私钥对协议内容签名。

10. Change Cipher Spec

资源路径:

Source: library/ssl_cli.c;
Func:   mbedtls_ssl_write_change_cipher_spec();

协议报文:

Transport Layer Security
    TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
        Content Type: Change Cipher Spec (20)
        Version: TLS 1.2 (0x0303)
        Length: 1
        Change Cipher Spec Message

函数说明:

Change Cipher Spec Message: 客户端发送 ChangeCipherSpec 消息,表示客户端期望变更密码套件。
  
TLS1.3 内已经移除。	

11. Encrypted Handshake Message (Finished)

资源路径:

Source: library/ssl_cli.c;
Func:   mbedtls_ssl_write_finished();

协议报文:

Transport Layer Security
    TLSv1.2 Record Layer: Handshake Protocol: Encrypted Handshake Message
        Content Type: Handshake (22)
        Version: TLS 1.2 (0x0303)
        Length: 40
        Handshake Protocol: Encrypted Handshake Message

函数说明:

客户端发送 Finished 消息,表示握手过程已经完成。

12. Change Cipher Spec

资源路径:

Source: library/ssl_cli.c;
Func:   mbedtls_ssl_parse_change_cipher_spec();

协议报文:

TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
    Content Type: Change Cipher Spec (20)
    Version: TLS 1.2 (0x0303)
    Length: 1
    Change Cipher Spec Message

函数说明:

服务器发送 Change Cipher Spec 消息,表示服务器期望切换密码套件。

13. Encrypted Handshake Message (Finished)

资源路径:

Source: library/ssl_cli.c;
Func:   mbedtls_ssl_parse_finished();

协议报文:

TLSv1.2 Record Layer: Handshake Protocol: Encrypted Handshake Message
    Content Type: Handshake (22)
    Version: TLS 1.2 (0x0303)
    Length: 40
    Handshake Protocol: Encrypted Handshake Message

函数说明:

服务器发送 Finish 消息,表示握手过程已经完成。

14. 消息报文

Transport Layer Security
    TLSv1.3 Record Layer: Application Data Protocol: http-over-tls
        Opaque Type: Application Data (23)
        Version: TLS 1.2 (0x0303)
        Length: 3172
        Encrypted Application Data: 3358e1ab02e292ef8a2734a7648250ec251dcc04c8a95504…

<think>嗯,用户让我介绍一下TLS握手协议。首先,我需要回想一下TLS的基础知识。TLS是传输层安全协议,用于加密网络通信,对吧?握手协议是TLS建立安全连接的过程。那用户可能想了解整个过程的具体步骤,以及每个步骤的作用。 用户可能是开发人员,或者是学习网络安全的学生,他们需要了解TLS的工作原理,可能用于配置服务器或者解决连接问题。我需要确保解释清晰,结构合理,并且符合他们提到的格式要求,比如行内公式用$...$,独立公式单独成段用$$...$$,但暂时没想到需要用到数学公式的地方,不过要注意如果有的话要正确应用。 首先,我应该分步骤介绍握手过程,比如从客户端发起请求开始,然后服务器响应,密钥交换,生成会话密钥等。每个步骤可能需要详细说明使用的算法和目的,比如非对称加密、对称加密、证书验证等。 还要注意用户提到的系统级指令,比如使用中文,结构清晰,分步解答。可能需要检查是否有技术术语需要进一步解释,比如“密码套件”或“前向保密”。此外,确保回答真实可靠,避免错误的信息,比如TLS版本之间的差异,比如TLS 1.2和1.3的区别是否需要提及? 可能用户没提到版本,但为了全面性,可以简要说明不同版本的握手过程是否有变化,比如TLS 1.3简化了握手步骤。不过这可能超出用户的问题范围,但作为扩展可能有帮助。需要平衡深度和广度,不要太过深入,但覆盖关键点。 接下来,我应该组织内容,首先定义TLS握手协议,然后分步骤解释流程,每个步骤的作用,可能涉及的加密技术,最后总结握手的目标。此外,可能需要提到证书验证和密钥生成的过程,比如如何通过预主密钥生成会话密钥。 需要确保每个部分逻辑连贯,例如: 1. 客户端发起ClientHello,包含支持的TLS版本、密码套件、随机数。 2. 服务器响应ServerHello,选择参数,发送证书。 3. 密钥交换,比如RSA或Diffie-Hellman。 4. 生成会话密钥,切换加密方式。 5. 完成握手,开始加密通信。 同时,需要解释每个步骤的安全目的,比如随机数防止重放攻击,证书验证身份,密钥交换确保密钥安全传输,会话密钥用于对称加密提高效率。 可能还需要提到前向保密(PFS),比如使用Diffie-Hellman临时密钥,这样即使长期密钥泄露,过去的通信也不会被解密。这点在TLS 1.3中成为强制要求,但可能在之前的版本中是可选的。 最后,检查是否有遗漏的关键点,比如握手失败的可能原因,比如证书不信任、算法不匹配等,但用户的问题可能不需要这些,但作为扩展可能会有帮助。不过根据用户的问题,可能只需要核心流程的介绍。 总结,结构应该是:简介、步骤详解(分点)、关键机制(如证书、密钥交换、加密套件)、握手目标,可能加上版本差异的注释。确保使用清晰的中文,避免技术术语堆砌,适当解释术语,但保持专业性。</think>TLS(Transport Layer Security)握手协议是建立加密通信通道的核心过程,主要分为以下步骤: --- ### 一、握手目标 1. **身份验证**:验证服务器(或客户端)的身份。 2. **协商参数**:确定加密算法(如`AES`)、密钥交换算法(如`ECDHE`)、哈希算法(如`SHA-256`)等。 3. **生成密钥**:通过安全方式生成会话密钥,用于后续对称加密。 --- ### 二、详细流程(以TLS 1.2为例) 1. **ClientHello** - 客户端发送: - 支持的TLS版本 - 支持的密码套件(如`TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`) - 客户端随机数(`Client Random`) 2. **ServerHello** - 服务器响应: - 选定的TLS版本和密码套件 - 服务器随机数(`Server Random`) - 服务器数字证书(包含公钥) 3. **证书验证** - 客户端验证服务器证书的合法性(如颁发机构、有效期等)。 4. **密钥交换** - **非对称加密阶段**: - 客户端生成预主密钥(`Pre-Master Secret`),用服务器公钥加密后发送。 - 或通过`Diffie-Hellman`算法协商共享密钥(支持前向保密)。 5. **生成会话密钥** - 客户端和服务器分别通过以下参数生成相同的会话密钥: $$ \text{会话密钥} = \text{PRF}(\text{Pre-Master Secret}, \text{"key expansion"}, \text{Client Random} + \text{Server Random}) $$ (`PRF`为伪随机函数) 6. **切换加密模式** - 双方发送`Change Cipher Spec`通知,后续通信使用会话密钥加密。 7. **握手完成** - 交换`Finished`消息验证握手过程未被篡改。 --- ### 三、关键机制 1. **前向保密(Forward Secrecy)** - 使用临时密钥(如`ECDHE`),即使长期私钥泄露,历史会话也无法解密。 2. **证书体系** - 依赖CA(证书颁发机构)链式信任,确保服务器身份可信。 3. **降级攻击防护** - 通过随机数和签名防止攻击者强制使用弱加密算法。 --- ### 四、TLS 1.3的改进 - **简化握手**:从2-RTT减少到1-RTT(甚至0-RTT)。 - **废弃不安全算法**:移除RSA密钥交换、SHA-1等。 - **密钥交换与认证合并**:提升效率与安全性。 --- ### 五、总结 TLS握手通过非对称加密建立信任,再转为高效对称加密,平衡安全性与性能。理解其流程有助于调试HTTPS问题、配置服务器及分析网络安全事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值