HTTPS中TLS握手协议

我们知道,https就是http+ssl/tls,而http又是建立在tcp/ip之上的,所以浏览器和服务器使用https协议传输时,先用tcp/ip协议三次握手建立连接,再用ssl/tls协议握手确定算法密钥等,然后才是加密传输应用数据,最后tcp/ip四次挥手断开连接。

TLS协议分为TLS记录协议以及TLS握手协议。TLS记录协议负责对消息的压缩、加密以及数据认证。TSL握手协议则是生成共享密钥以及交换证书,其中共享密钥是为了支持TLS记录协议的加密传输,而交换证书是通信双方进行认证。

TLS握手协议的握手过程如下图所示:

具体步骤:

1、ClientHello:客户端向服务器发送"ClientHello"消息,这些消息主要包含:可用版本号、当前时间、客户端随机数、会话ID、可用密码套件清单(对称和非对称加密的组合清单)、可用的压缩方式清单。客户端提供可用版本号、密码套件清单、压缩方式清单让服务器选择。是因为不同型号版本浏览器不同,所能支持的算法也不同,需要和服务器进行协商。当前时间在TLS中基本没用到,随机数可以被后续步骤用到。

2、ServerHello:服务器端会响应客户端,发送"ServerHello"消息,具体内容有:使用的版本号、当前时间、服务器随机数、会话ID、使用的密码套件、使用的压缩方式。即,服务器发送本次传输使用的版本号、密码套件、压缩方式给客户端。生成的随机数后续会用到,该随机数生成与浏览器的随机数无关。

3、Cretificate:服务器发送证书给客户端,首先发送服务器证书,接收按顺序发送服务器证书签名的认证机构证书。匿名通信则会省略此步骤。

4、ServerKeyExchange:服务器发送密钥参数给客户端,比如RSA公钥的参数N和E以及散列值等

5、CeritificateRequest:服务器发送服务器能理解的证书类型清单和认证机构清单给客户端。服务器请求对客户端进行认证,当不使用客户端认证,服务器不会发送此消息。

6、ServerHelloDone:服务器发送问候结束消息给客户端,代表服务器从ServerHello之后的一系列消息的结束。

7、Cretificate:客户端向服务器发送证书,此步骤需要服务器发送了证书认证请求(第五步骤CeritificateRequest),否则客户端不会发送证书给服务器。

8、ClientKeyExchange:客户端发送非对称加密算法的预备主密码给服务器,服务器和客户端可以根据预备主密码计算出相同的主密码,根据主密码生成 对称加密的密钥、消息认真码的密钥、对称密码CBC模式中的初始化向量IV。

9、CretificateVerify:客户端将主密码、握手协议消息的散列值以及自己的数字签名发送给服务器,向服务器证明自己持有客户端证书的私钥。此步骤仅当服务器发送了证书认证请求(第五步骤CeritificateRequest)才会进行,否则客户端不会向服务器发送自己的证明信息。

10、ChangeCipherSpec:客户端会向服务器发送切换密码消息,声明之后,服务器和客户端会同时切换密码。这个消息仅限于变更密码才会发出,实际上,这个消息不是握手协议消息,是密码变更协议的消息。

11、Finished:客户端发送握手协议结束消息给服务器,通过这个消息,可以确认客户端握手协议和密码套件切换是否正确结束。

12、ChangeCipherSpec:服务端发送切换密码消息给客服端

13、Finished:服务器发送握手协议结束消息给客户端,这一消息会通过确定好的密码套件来加密传输。

14、切换到应用数据协议:以上步骤完成后,客户端和服务器会使用应用数据协议和TLS记录协议进行密码通信。

可以看到,握手协议完成了以下操作:

1、客户端获得了服务器的公钥,完成了服务器认证。

2、服务器获得了客户端的公钥,完成了客户端认证(当需要认证客户端时)。

3、客户端和服务器生成了密码通信中使用的共享密钥。

4、客户端和服务器生成了消息认证码中使用的共享密钥。

以上握手协议是TLS握手协议的一部分,TLS握手协议还包括:密码变更协议、警告协议、应用数据协议。

密码变更协议:客户端和服务器修改密码前分别发出 ChangeCipherSpec 消息表明要切换密码,并发送Finished 消息 确认切换密码结束。

警告协议:发生错误时通知通信对象,握手协议过程中异常、消息认证码错误等,都会使用该协议。

应用数据协议:用于通信对象之间传输应用数据,当TLS加密http时,请求和响应就会通过TLS的应用数据协议和TLS记录协议来进行传送。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间在手上,需要抓住

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值