第一阶段:构建安全能力
客户端-client_hello:
客户端可以支持的最高 SSL 版本号;
客户端生成的 32 字节随机数;
会话标识符 ID;
客户端可以支持的密码套件列表;
客户端可以支持的压缩方法列表。
服务器-server_hello:
SSL 版本号,以接收到的客户端 SSL 版本和服务器支持的最高版本中的较低者为准;
服务器生成的一个32字节的随机数;
会话标识符 ID;
从收到的客户端密码套件列表中选择一个密码套件(包括密钥交换算法、对称加密算法和摘要算法);
从收到的客户端压缩方法列表中选择一种压缩方法。
第二阶段:服务器端验证和密钥交换
服务器-server_key_exchange:
可选,取决于密钥协商算法。 如果发送给客户端的服务器证书数据不足以根据第一阶段选择的密钥交换算法协商密钥,则该步骤对于密钥协商元素是不够的。
服务器证书请求:
可选,请求验证客户端证书信息,单向数据认证(仅认证服务器)没有这一步。
服务器-server_hello_done:
通知客户端版本号和加密套件协商结束。
第三阶段:客户端认证和密钥交换
客户证书:
可选,客户端数字证书,在双向数据认证中,服务器需要验证客户端身份的合法性。
客户端-client_key_exchange:
客户端根据密钥交换算法、密钥协商参数或预主密钥(服务器公钥加密)交换密钥。
客户端证书_验证:
可选的,客户端用客户端的私钥对交换的握手消息和会话密钥的摘要值进行加密并发送给服务器。
第 四阶段:完成
客户端-change_cipher_spec:
更改密码格式信息并告诉服务器使用会话密钥加密消息。
客户完成:
向服务器宣布握手协议完成。
服务器-change_cipher_spec:
更改密码格式信息并告诉客户端使用会话密钥加密后续消息。
服务器完成:
向客户端宣布握手协议的完成。