HTTP网络协议六:HTTPS、TLS的连接过程

HTTPS介绍

  • HTTPS(HyperText Transfer Protocal Secure):超文本传输协议,是在HTTP的基础上使用SSL/TLS来加密报文,对窃听和中间人攻击提供合理的防护。

    • HTTP over TLS、HTTP over SSL、 HTTP Secure
    • HTTPS默认端口是443(HTTP为80)
  • TLS:(Transport Layer Secuity):传输层安全性协议

    • 前身是SSL(Secure Sockets Layer):安全套接字
  • SSL/TSL:也可以用在其他协议上

    • FTP -> FTPS
    • SMTP -> SMTPS
    • 工作在应用层和传输层中间
      在这里插入图片描述
  • HTTPS的通信过程

    1. TCP的三次握手
    2. TLS的连接
    3. HTTP请求和响应

TLS1.2的连接过程

在这里插入图片描述
在这里插入图片描述

  1. Client Hello

    • TLS的版本号
    • 一个随机数 (Client Random)
    • 支持的加密组件(Cipher Suite)列表, 加密组件是指所使用的加密算法及密钥长度等
      在这里插入图片描述
  2. Server Hello

    1. TLS的版本号
    2. 一个随机数 (Server Random)
    3. 选择的加密组件, 是从接收到的客户端加密组件列表中挑选出来的
      在这里插入图片描述
  3. Certificate

    1. 服务器的公钥证书(被CA签名过的)
      在这里插入图片描述
  4. Server Key Exchange
    ECDHE是一种密钥交换算法, 为了防止伪造, Server Params经过了服务器私钥签名
    用以实现ECDHE算法的其中一个参数(Server Params)
    在这里插入图片描述

  5. Server Hello Done
    告知客户端: 协商部分结束
    在这里插入图片描述

目前为止, 客户端和服务器之间通过明文共享了:
Client Random
Server Random
Server Params
而且, 客户端也已经拿到了服务器的公钥证书, 接下来, 客户端会验证证书的真实有效性

  1. Client Key Exchange
    在这里插入图片描述

这里是目前为止, 客户端和服务器都拥有了ECDHE算法需要的2个参数:
Server ParamsClient Params,
客户端、服务器都可以使用ECDHE算法根据Server Params、Client Params计算出一个新的随机密钥串: Pre-master secret,
然后结合Client Random、Server Random、Pre-master secret生成一个主密钥,
最后利用主密钥衍生出其他密钥:客户端发送用的会话密钥、服务器发送用的会话密钥等
注意: 这里是两个会话密钥
1: 客户端会话密钥用于客户端发送消息, 以及服务器对该消息进行解密;
2:服务端会话密钥用于服务器发送消息, 以及客户端对该消息进行解密引用

  1. Change Cipher Spec
    告知服务器: 之后的通信会采用计算出来的会话密钥进行加密
    在这里插入图片描述

  2. Finished
    在这里插入图片描述

包含连接至今全部报文的整体校验值(摘要), 加密之后发送给服务器; 这次握手协商是否成功, 要以服务器是否能够正确解密该报文作为判定标准

  1. Change Cipher Spec
  2. Finished
    在这里插入图片描述

到此为止, 客户端服务器都验证加密解密没问题, 握手正式结束, 后面开始传输加密的HTTP请求和响应

自己的总结

开始加密通信之前,客户端和服务器都必须建立连接和交换参数,这个过程叫握手(handshake)。

  1. 客户端给出TLS协议版本号,一个客户端随机生成的随机数(Client random),以及客户端支持的加密套件列表
  2. 服务器返回给客户端TLS版本,选中的加密套件、自己的数字证书、加密套件需要的server Params、以及一个服务器生成的随机数(Server random),如果需要双向验证会向客户端索要客户端证书。
  3. 客户端确认数字证书的有效性,客户端返回秘钥套件的一个参数clicent Params,然后根据Server Params、Client Params 生成一个新的随机数Premaster random,此随机数用服务器的公钥加密,利用三个随机数可以生成会话秘钥、对之前双方收到的信息生成哈希值, 并使用服务器的数字证书中的公钥,加密这个哈希值,发给服务器。
  4. 服务器用自己收到的Server Params、Client Params 也生成一个随机数Premaster random(跟客户端生成的一致,我不太确定、应该是一直的要不然生成的hash值不一样)、服务器使用的私钥获取客户端发来的哈希值,根据双方交换的信息也生成一个hash值,做对比,确认是否一致。
  5. 客户端和服务器根据约定的加密算法,使用前边三个随机数,生成"对话秘钥"(Session Key),用来加密接下来的整个会话过程。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值