证书的应用之一——TCP&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 发送 Certificate4.Server 发送 ServerHelloDone5.Client 发送 ClientKeyExchange,用于与 server 交换 session key6.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,会在生成 session key 时使用, Cipher suite 列...