SSL与TLS

343 阅读5分钟

一、SSL和TLS分别是什么?

整体结构

SSL是介于HTTP协议与TCP之间的可选层

img

SSL

安全套接字层(Secure Socket Layer),Netscape(网景)研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。

位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。

SSL协议分为两层:

  • SSL记录协议(SSL Record Protocol):建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持
  • SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

TLS

传输层安全协议(Transport Layer Security),是IETE制定的一种新的协议,建立在SSL 3.0协议规范之上,可以理解为SSL 3.1版本,并写入了RFC,也由两层组成:TLS记录协议和TLS握手协议。

TLS相比SSL,增强了部分内容:

  1. 更安全的MAC算法(MAC:保证数据的完整性)
  2. 更严密的警报
  3. “灰色区域”规范的更明确定义

SSL/TLS协议提供的主要服务

  1. 认证用户和服务器,确保数据发送到正确的客户机和服务器
  2. 加密数据防止中途被窃取
  3. 维护数据的完整性,确保数据在传输过程中不被改变

二、TLS握手-密钥协商过程

SSL中的握手协议主要用来协商秘钥,记录协议则定义了传输的格式。

非对称加密速度较慢,所以一般只用来交换秘钥,通过公钥算法协商出一份秘钥,然后使用对称加密通信,这个过程中,使用HMAC处理保证数据完整性。

下图是流程图:

SSL/TLS原理详解

2.1 流程概览

1. Client Hello

TLS协议传输过程中,确保使用相同的加密算法才能保证正常加解密。

这一步需要提供的信息:

  1. 支持的协议版本,如TLS1.0版
  2. 客户端生成的随机数(第一个随机数),稍后用于生成“对话秘钥”(这个随机数在后边会用到)
  3. 支持的加密方法,如RSA公钥加密
  4. 支持的压缩方法

2. Server Hello

在这个步骤中,server需要将服务器证书发送给客户端,用于客户端认证服务器身份。

Server Key Exchange

当服务端向客户端发送的证书中没有提供足够的信息(证书公钥)时,还可以向客户端发送一个Server Key Exchange。

一般客户端能够自己计算PreMaster Secret。但在ECDH算法下,计算PreMaster Secret需要客户端和服务端一起才可以,所以需要服务端通过Server Key Exchange将临时ECDH pubilc key发送给客户端,用于计算PreMaster Secret。

Client Certificate Request

在这个阶段,服务端也对客户端进行验证,确保是合法的客户端

这一步server需要回应的信息:

  1. 确认使用的加密通信协议版本,比如TLS1.0版本,如果不支持,服务器会关闭加密通信
  2. 服务器生成的随机数(第二个随机数),稍后用于生成“对话秘钥”
  3. 确认使用的加密方法,比如RSA公钥加密
  4. 服务器证书

3. Client Key Exchange

Client Key Exchange

如果服务端需要对客户端进行验证,在客户端收到服务端的 Server Hello 消息之后,首先需要向服务端发送客户端的证书,让服务端来验证客户端的合法性。

Certificate Verify

客户端检查server的证书,取出server公钥,继续发送以下信息:

  1. 一个随机数(第三个随机数),使用公钥加密,防止被窃听,也被称为PreMaster Secret
  2. 编码改变通知,随后的消息都将用于双方协定的加密方法和秘钥发送
  3. 握手结束通知,表明握手阶段结束。同时也会发送前面所有内容的hash,用于校验

ChangeCipherSpec

独立协议,用于告知服务端,客户端已切换到协商好的加密套件。之后会用协商好的加密套件和Session Secret加密一段Finish的数据给服务端,目的是为了在正式传输应用数据之前对刚刚握手建立起来的加解密通道进行验证。

4. Server Finish

服务端使用私钥解密客户端发送过来的PreMaster Secret,并进行验证,然后使用和客户端相同的方式生成Session Secret,也会向客户端发送一个ChangeCipherSpec,之后也会使用Session Secret加密一段Finish消息发送给客户端,用于验证之前通过握手建立起来的加解密通道是否成功。

2.2 Secret Keys

在TLS传输过程中,Secret Keys是非常重要的部分,需要重点了解下其原理和作用。

整体流程图 SSL/TLS原理详解

整个过程中,总共会产生2个随机数(客户端和服务端各一个),和一个PreMaster Secret

PreMaster Secret

PreMaster Secret是客户端生成,使用服务端的公钥加密后发送给服务端。用来和Hello阶段产生的两个随机数一起生成Master Secret。

客户端和服务端拥有相同的PreMaster Secret和随机数。

Master Secret

客户端和服务端使用相同的算法,通过随机数和PreMaster Secret生成Master Secret,用于后续的数据通信。

生成原理参考:Https SSL/TLS PreMaster/Master Secret(Key)计算

全文参考链接:SSL原理详解知乎SSL/TLS整理