1、客户端发送所支持的协议版本(Client_version)、随机值(Random)、会话ID(Session_ID)、支持的加密套件(cipher_suites)等。
2、服务端确定所支持的协议版本(Server_version)、随机值(Random)、会话ID(Session_ID)、支持的加密套件(cipher_suites)等。
3、服务端发送自己的证书,一般是中间证书和域名证书。
备注:(ocsp验证证书状态)
4、携带密钥交换的额外数据,针对不同的加密套件设置了参数。比如,ECDHE密钥交换算法。
备注:选择一个椭圆曲线(椭圆曲线基点G定好,椭圆曲线随机数作为私钥)、根据基点和私钥计算出椭圆曲线公钥,然后用RSA算法给公钥签名(私钥给公钥签名)。
发送了椭圆曲线、椭圆曲线基点G、公钥给客户端。
5、服务端表明server hello及其相关消息结束,服务端发送完了支持密钥交换的消息。
备注:客户端浏览器会验证证书的有效性、完整性、信任。
6、客户端椭圆曲线随机数作为私钥,椭圆曲线基点G、计算出椭圆曲线公钥。发送给服务端。
备注:双方根据对方的椭圆曲线公钥、本身的椭圆曲线私钥、椭圆曲线基点G计算出(X,y)公钥密钥x
如果一致继续进行。
7、changecipherspec,这是一个独立的tls协议,密码已经协商好了,后续的消息可以使用密码保护了。
8、客户端所有握手消息的hash值发送给服务端。
9、changecipherspec,这是一个独立的tls协议,密码已经协商好了,后续的消息可以使用密码保护了。
10,服务端所有握手消息的hash值发送给客户端。



