TLS连接

TLS连接

在这里插入图片描述

在TCP三次握手后,TLS握手要经历2个RTT:

客户端:

​ Client Hello

​ - 随机数C,客户端的TLS版本号,密码套件列表,扩展列表

服务器:

​ Server Hello

​ - 随机数S,确认TLS版本号和使用的密码套件(ECDHE)

​ - 服务器使用的证书(Server Certificate)

​ - Server Key Exchange 密钥交换算法参数(ECDHE),签名认证

第二个RTT:

客户端:

​ - Client Key Exchange 密钥交换算法参数(ECDHE)

​ - Change Cipher Spec 之后改用会话密钥加密通信

​ - Finished 所有握手数据的摘要

​ - GET/HTTP/1.1 加密的HTTP消息

服务器:

​ - Change Cipher Spec 之后使用会话密钥加密通信

​ - Finished 所有握手数据的摘要

​ - HTTP/1.1 200 OK 加密的HTTP消息

在 TCP 建立连接之后,浏览器会首先发一个“Client Hello”消息,里面有客户端的版本号、支持的密码套件,还有一个随机数,用于后续生成会话密钥。

服务器收到“Client Hello”后,会返回一个“Server Hello”消息。把版本号对一下,也给出一个随机数,然后从客户端的列表里选一个作为本次通信使用的密码套件。然后,服务器为了证明自己的身份,就把证书也发给了客户端(Server Certificate)。接下来,在证书后发送“Server Key Exchange”消息,里面是椭圆曲线的公钥(Server Params),用来实现密钥交换算法,再加上自己的私钥签名认证。

客户端拿到服务器的证书后,开始走证书链逐级验证,确认证书的真实性,再用证书公钥验证签名,就确认了服务器的身份。然后,客户端按照密码套件的要求,也生成一个椭圆曲线的公钥(Client Params),用“Client Key Exchange”消息发给服务器。

现在客户端和服务器手里有了三个随机数:Client Random、Server Random 和 Pre-Master。用这三个作为原始材料,就可以生成用于加密会话的主密钥,叫“Master Secret”。

主密钥有 48 字节,但它也不是最终用于通信的会话密钥,还会再用 PRF 扩展出更多的密钥,比如客户端发送用的会话密钥(client_write_key)、服务器发送用的会话密钥(server_write_key)等等,避免只用一个密钥带来的安全隐患。

有了主密钥和派生的会话密钥,客户端发一个“Change Cipher Spec”,然后再发一个“Finished”消息,把之前所有发送的数据做个摘要,再加密一下,让服务器做验证。

服务器也是同样的操作,发“Change Cipher Spec”和“Finished”消息,双方都验证加密解密 OK,握手正式结束,后面就收发被加密的 HTTP 请求和响应了

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值