HTTPS的SSL单向验证和双向验证

HTTPS的SSL单向验证和双向验证

​ HTTPs利用SSL/TLS建立安全信道,加密数据包,主要目的是提供对网站服务器的身份认证,同时保护交换数据的安全性与完整性

SSL/TLS

​ TLS在传输层对网络连接进行加密,前身是SSL协议,由网景公司1995年发布,用以保障数据在Internet上安全地进行传输,利用数据加密技术,确保数据在网络传输过程中不会被截取或窃听.

​ 数据加密用到了非对称加密和对称加密.TCP协议建立传输连接时,SSL首先对对称加密地密钥使用非对称加密地公钥进行非对称加密,连接建立好之后,SSL对传输内容使用对称加密.

​ 对称加密,速度高,可加密内容较大,用来加密会话过程中地消息.

​ 非对称加密,加密速度较慢,但能提供更好地身份认证,用对加密对称加密地密钥.

OSI模型

​ HTTPS和HTTP协议位于应用层,SSL/TLS位于传输层和应用层之间,TCP协议位于传输层,IP协议位于网络层

在这里插入图片描述

SSL单向验证

​ 客户端执行HTTPS请求时,需要由TCP协议建立和释放连接,这就涉及TCP协议地三次握手和四次挥手.

三次握手

​ 所谓三次握手是指建立一个TCP连接时,需要客户端和服务器共发送三个包,三次握手地目的是连接服务器指定端口,建立TCP连接,并同步连接双方地序列号和确认好并交换TCP窗口大小信息,在SOCKET编程中,客户端执行connect()时,将出发三次握手.

  • 客户端发送一个TCP地SYN标志位置1地包指明客户打算连接地服务器地端口,以及初始序号X,保存在包头地序列号(sequence number)字段里.

  • 服务器发回确认包ACK应答,即SYN标志位和ACK标志位均为1同时,将确认序列号设置为客户地ISN加1,即X+1

  • 客户端再次发送确认包(ACK)SYN标志位为0,ACK标志位为1,并且把服务器发来地ACK地序列号字段+1,放在确定字段中发送给对方,并且在数据段发泄地ISN的+1

    四次挥手
    • 客户端主动断开连接,向服务端发送FIN报文段,即连接释放报文段(FIN=1,序号seq=u),并且状态变为FIN-WAIT-1(终止等待1)。
    • 服务端收到客户端的FIN报文段,响应请求,也向客户端发送一个ACK = 1,seq = y, ack = u + 1 的报文段,来表示自己已经收到了客户端的断开连接的请求报文,同时将自己的状态变为CLOSE-WAIT(关闭等待)。
    • 等待一段时间,当服务端将剩余数据发送完后,也会向客户端发送一个FIN = 1 的报文段,其中seq = w, ack = u + 1, ACK = 1,同时,自身进入LAST-ACK(最后确认)状态,来等待客户端的ACK。
    • 客户端收到服务端的断开释放报文段FIN,同样对它进行响应,向服务段发送ACK = 1 ,seq = u + 1, ack = w + 1的报文段,并且自身进入TIME-WAIT状态,一段时间过后,服务端收到客户端的响应报文,将自身状态变为Closed,客户端等待TIME-WAIT时间过后,也将变为Closed状态。四次挥手完毕,客户端和服务端断开连接。

TCP连接建立好之后,对于HTTP而言,服务器就可以发送数据给客户端,但是对于HTTPS而言,它还要运行SSL/TLS协议,SSL/TLS协议分两层,第一层是记录协议,主要用于传输数据的加密压缩,第二层是握手协议,它建立在第一层之上,主要用于数据传输前的双方身份的认证,协商加密算法,交换密钥.

SSL单向验证总共分为四步:

  1. 客户端向服务端发起Client Hello,请求内容包括:

    • 客户端支持的SSL/TLS协议版本列表
    • 客户端支持的对称加密算法
    • 客户端生成的随机数A
  2. 服务端回应客户端Server Hello,回应内容包括:

    • 双方都支持的SSL/TLS协议版本
    • 双方都支持的对称加密算法
    • 服务器密钥库中的证书
    • 服务端生成的随机数B
  3. 客户端收到服务端的回应,客户端检查服务端的证书是否合法,校验内容如下:

    • 服务端证书是否过期
    • 服务端证书是否被吊销
    • 服务端证书是否可信
    • 服务端证书域名与客户端请求域名是否一致.

    验证通过后,客户端回应服务端,回应内容如下:

    • 客户端生成一个随机数C,随机数C也被成为"pre-master-key"
    • 使用服务端证书中的公钥加密随机数C,将加密后的随机数C发送给服务端
  4. 服务器使用密钥库中的私钥解密客户端加密后的随机数C,此时,客户端和服务端都拿到了随机数A,B,C.双方通过这三个随机数使用相同的密钥交换算法得到相同的对称加密密钥,这个对称加密密钥将作为客户端和服务端传输数据时对称加密使用的密钥.

SSL双向加密验证

​ SSL单向验证过程中,客户端会验证自己访问的服务器端,服务器端对客户端不做验证,如果服务器端验证客户端,则需要开启服务端验证,这就是双向验证.

​ SSL双向验证与单向验证不同之处在于:

  • 第二步中服务器端第一次回应客户端的Server Hello消息中,会要求客户端提供客户端证书
  • 第三步中客户端校验完服务器证书后,回应的内容中会增加两个消息
    • 客户端证书
    • 客户端证书校验消息(CertificateVerify message):客户端将之前收到的和发送的消息组合起来,并用hash算法得到一个hash值,然后用客户端密钥库中的私钥对这个hash值进行签名,这个签名就是CertificateVerify message

服务端接收到客户端证书后,会进行如下处理:

  • 确认客户端发送的证书是合法的
  • 用客户端证书中的公钥验证收到消息的签名,以确定这个证书是客户端发出的
  • 服务器端和客户端,握手结束,之后就可以用对称加密传输数据了
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值