SSL 通信过程分析 一、SSL 建立握手连接目的 1.身份的验证,client 与 server 确认对方是它相连接的,而不是第三方冒充的,通过证书实现。 2.client 与 server 交换 session key,用于连接后数据的传输加密和 hash 校验。 二、简单的 SSL 握手连接过程 (仅 Server 端交换证书给 client): 1.client 发送 ClientHello,指定版本,随机数(RN),所有支持的密码套件(CipherSuites) 2.server 回应 ServerHello,指定版本,RN,选择 CipherSuites,会话 ID(Session ID) 3.server 发送 Certificate 4.Server 发送 ServerHelloDone 5.Client 发送 ClientKeyExchange,用于与 server 交换 session key 6.Client 发送 ChangeCipherSpec,指示 Server 从现在开始发送的消息都是加密过的 7.Client 发送 Finishd,包含了前面所有握手消息的 hash,可以让 server 验证握手过程是否被第三方篡改 8.Server 发送 ChangeCipherSpec,指示 Client 从现在开始发送的消息都是加密过的 9.Server 发送 Finishd,包含了前面所有握手消息的 hash,可以让 client 验证握手过程是否被第三方篡改,并且证明自己是 Certificate 密钥的拥有者,即证明自己的身份 三、抓包实际分析连接过程 下面从抓包数据来具体分析这一过程并说明各部分数据的作用以及如实现前面列出的握手的目标,当然了,最重要的还是说明为何这一过程是安全可靠的,第三方无法截获,篡改或者假冒。 1.client发送 ClientHello 每一条消息都会包含有ContentType,Version,HandshakeType 等信息。 ContentType 指示 SSL 通信处于哪个阶段,是握手(Handshake),开始加密传输(ChangeCipherSpec)还是正常通信(Application)等,见下表 Hex Dec Type 0x14 20 ChangeCipherSpec 0x15 21 Alert 0x16 22 Handshake 0x17 23 Application Version 是 TLS 的版本,见下表 Major Version Minor Version Version Type 3 0 SSLv3 3 1 TLS 1.0 3 2 TLS 1.1 3 3 TLS 1.2 Handshake Type 是在handshanke 阶段中的具体哪一步,见下表 Code Description 0 HelloRequest 1 ClientHello 2 ServerHello 11 Certificate 12 ServerKeyExchange 13 CertificateRequest 14 ServerHelloDone 15 CertificateVerify 16 ClientKeyExchange 20 Finished ClientHello 附带的数据随机数据RN,...