SSL/TLS 学习1. 基本概念

一、 简介

SSL/TLS协议是安全的通信模式。

1. 通信模式演化

正常通讯,无加密

通信过程很不安全,黑客可以监听双方的通信、拦截通信、伪造数据进行攻击。

使用密钥加密

为了应对攻击,对通信数据使用对称加密算法进行加密。通信双方需要共享密钥。
1981年,出现对称加密算法DES。DES使用56bit的密钥。但由于双方需要共享密钥,这个密钥在传输过程中有可能被拦截。

更高强度的密钥

DES可能被暴力破解。为了更高的安全性,出现了triple-DES(最长168bit密钥)、AES (最高 256bit密钥 )。
这仍没解决双方传递共享密钥的问题。

非对称加密

最著名的非对称加密算法RSA算法,其加密与解密使用不同密钥,加密的密钥可以公开。这样可以有效解决双方共享密钥的问题。在使用中,通讯双方都有一个公钥和私钥。

A要给B发网络数据流程:

  1. A使用私钥加密数据的hash值
  2. A再用B的公钥加密数据。
  3. A将加密的hash值和加密的数据加上一些其它信息(如时间戳)发给B
  4. B 先用私钥解密数据
  5. B本地运行一个hash值
  6. B用A的公钥解密hash值,与自己运行的比较,检验数据完整性。

但最初通讯交换公钥的过程,仍存在被中间人攻击的可能。

使用可信任机构颁布数字证书

2. SSL/TLS发展历程

  1. 1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。
  2. 1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。
  3. 1996年,SSL 3.0版问世,得到大规模应用。
  4. 1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。
  5. 2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的修订版。
    目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持。
    TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。

3. SSL/TLS 基本运行过程

  1. 客户端向服务器端索要并验证公钥
  2. 双方协商生成“对话密钥”
  3. 双方采用“对话密钥”进行加密通信。

SSL/TLS 使用非对称加密 。

  • 保证公钥不被篡改:将公钥放在数字证书中,只要证书是可信的,公钥就是可信的。
  • 每一次对话,双方生成一个对称密钥,用来加密信息,采用对称加密。 非对称加密只用来加密对称加密的密钥。

4. 握手阶段详细过程

在这里插入图片描述

握手阶段涉及4次通信。

4.1 客户端发出请求(Client Hello)

客户端数据主要包含:

  • 支持的协议版本,如TLS 1.0版
  • 一个客户端生成的随机数,稍后用于生成公钥
  • 支持的加密方法 ,如RSA
  • 支持的压缩方法。

客户端发送的信息中不包括服务器的域名。2006年,TLS协议加入了一个Service Name Indication扩展,允许客户端向服务器提供它所请求的域名。

4.2 服务器回应(Server Hello)

服务器收到客户端请求后,向客户端发出回应,包含:

  • 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
  • 一个服务器生成的随机数,稍后用于生成"对话密钥"。
  • 确认使用的加密方法,比如RSA公钥加密。
  • 服务器证书。

如果是双向认证,服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供客户端证书。即金融机构服务器端只允许认证客户连入自己的网络,会向正式客户提供USB密钥,里面就包含了一张客户端证书。

4.3 客户端回应

客户端收到服务器回应以后,首先验证服务器证书。如果有以下问题:

  • 证书不是可信机构颁布
  • 或者证书中的域名与实际域名不一致
  • 或证书已经过期
    这时就会向访问者显示一个警告,由用户选择是否还要继续通信。

如果证书没有问题,客户端就会从证书中取出服务器的公钥,然后,向服务器发送以下信息:

  • 一个随机数,用服务器公钥加密,称为pre-master key。
  • 编码改变通知,表示随后的信息将用双方商定的加密方法 和密钥发送
  • 客户端握手结束通知,表示客户端的握手阶段已经结束。 这一项同时也是前面发送的所有内容的hash值,用来供服务器检验。

客户端与服务器同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把”会话密钥“。

使用三次随机数,防止有的主机生成的只是伪随机数。

4.4 服务器回应

服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的”会话密钥“,然后给客户端发送下面信息:

  • 编码改变通知,表示随后的信息都将用双方商定的加密方法 和密钥发送。
  • 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端检验。

参考文章:
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

猜你喜欢

转载自blog.csdn.net/xundh/article/details/106097059