SSL和TLS-SSL Handshake Protocol

SSL握手协议是SSL记录协议之上的协议,用于客户端和服务器互相认证,协商加密套件和压缩方法。它包括四组消息,如ClientHello、ServerHello、Certificate等。ClientHello是客户端发起的第一个消息,ServerHello响应并选择协议版本、session ID等。之后,双方交换证书、密钥交换信息,并通过Finished消息确认握手成功,开始安全的数据传输。HelloRequest消息虽然可选,但很少使用。整个过程确保了连接的安全性。
摘要由CSDN通过智能技术生成

SSL握手协议位于SSL记录协议之上。它允许客户端和服务器互相认证,协商cipher suites和压缩方法。
The SSL handshake protocol

上图中的方括号里的消息是可选的,不总是被发送。ChangeCipherSpec实际上不是SSL握手协议的消息。SSL握手协议包含四组消息-叫flights-在客户端和服务器之间交换。一个flight的所有消息可以在一个TCP段内传输。也可能包含一个叫做HelloRequest的第五个flight(type值是0x00),它可能从服务器发送给客户端,初始化一个SSL握手。很少使用这个消息。消息必须以这样的顺序发送,否则返回致命错误。

  • ClientHello:从客户端发给服务器(type值是0x01)
  • 第二个flight包含2-5个消息,从服务器发给客户端
    • ServerHello:响应ClientHello消息(type值是0x02)
    • Certificate:如果服务器需要证明自己,就发送(type值是0x0B)
    • ServerKeyExchange:某些情况下,需要发送(type值是0x0C)
    • CertificateRequest:如果服务器需要客户端使用公钥证书证明自己(type值是0x0D)
    • ServerHelloDone:最后发送(type值是0x0E)
      交换完ClientHello和ServerHello,客户端和服务器协商好协议版本、session ID、cipher suite和压缩方法。此外,已经生成了ClientHello.random和ServerHello.random。
  • 第三个flight包含2-5个消息,从客户端发给服务器
    • Certificate:如果服务器发送了CertificateRequest,客户端发送(type值是0x0B)
    • ClientKeyExchange:这是协议的主要步骤。此消息的内容取决于key交换算法(type值是0x10)
    • CertificateVerify:如果客户端发送了Certificate消息,就必须发送CertificateVerify。此消息使用与客户端证书的公钥对应的私钥进行数字签名。(type值是0x0F)
    • ChangeCipherSpec:使用SSL change cipher spec协议发送该消息。它的pending write状态变成current write状态
    • Finished:这是第一个使用cipher spec加密保护的消息(type值是0x14)
  • 最后一个flight包含2个消息,从服务器发给客户端
    • ChangeCipherSpec:
    • Finished:

这样,握手完成了。客户端和服务器开始使用SSL application data protocol交换应用层数据。
大多数SSL session从握手开始,交换一次应用数据,等一会就结束了。如果需要交换更多数据(同一个客户端和服务器之间),有两种可能行:或者是一个全的握手协商一个新的session,或者是一个简单的握手继续一个旧的(先前建立的)session。
SSL协议允许客户端在任何时间简单地发送一个ClientHello消息,请求session重新协商。如果服务器想重新协商,就发送HelloRequest消息。
比如,一个web服务器的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值