传输层安全协议

153 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第25天,点击查看活动详情

Web安全需求

web安全威胁

威胁后果对策
完整性用户数据修改 木马浏览器 更改存储 更改传输中的消息流量丢失数据 设备受损 使其他一些威胁更加脆弱密码校验和
机密性网上窃听 从服务器上盗窃信息 网络配置信息 哪个客户与服务器通话的信息信息丢失 秘密丢失加密、WEB委托代理
拒绝服务卡断用户线路 假的请求挤占机器 用垃圾填满驱动或存储 用DNS攻击孤立机器断网 网络堵塞 阻止用户完成任务难以防止
认证假冒合法用户 伪造数据假冒用户 使假信息得以确认密码技术

SSL/TLS

SSL提供的安全服务

  • 用户和服务器的合法性认证 using X.509v3 digital certificates
  • 传输数据的机密性 using one of DES, Triple DES, IDEA, RC2, RC4, …
  • 传输数据的完整性 using MAC with MD5 or SHA-1

SSL/TLS概况

  • 协议分为两层

1.jpg

上层协议是用于管理SSL密钥信息的交换,下层提供基本的安全服务
  • TLS握手协议

  • 客户和服务器之间相互认证

  • 协商加密算法和密钥

  • 它提供连接安全性,有三个特点

    • 身份认证,至少对一方实现认证,也可以是双向认证
    • 协商得到的共享密钥是安全的,中间人不能够知道
    • 协商过程是可靠的
  • TLS记录协议

    • 建立在可靠的传输协议(如TCP)之上,它提供连接安全性,有两个特点

      • 保密性,使用了对称加密算法
      • 完整性,使用HMAC算法
    • 用来封装高层的协议

  • SSL连接(connection) 一个连接是一个提供一种合适类型服务的传输(OSI分层的定义)。 SSL的连接是点对点的关系。 连接是暂时的,每一个连接和一个会话关联。

  • SSL会话(session) 一个SSL会话是在客户与服务器之间的一个关联。会话由Handshake Protocol创建。会话定义了一组可供多个连接共享的密码安全参数。 会话用以避免为每一个连接提供新的安全参数所需昂贵的协商代价

2.jpg

TLS握手协议(Handshake protocol)

主要用来让客户端及服务器确认彼此的身份。

为了保护SSL记录封包中传送的数据,Handshake协议还能协助双方选择连接时所会使用的加密算法、MAC算法、及用于保护SSL记录中所发数据的加密密钥。

在传送应用程序的数据前,必须使用Handshake 协议来完成上述事项。

位于TLS记录协议之上 也用到了TLS记录协议的处理过程 ContentType = 22 协议格式

3.jpg 用途: 当TLS客户和服务器开始通讯的时候,它们要通过协商,在以下信息方面获得一致: 协议版本、密码算法、是否认证对方、 用什么技术来产生共享秘密数据,等等

第一阶段:建立起安全能力属性

4.jpg

  1. 客户发送一个client_hello消息,包括以下参数:1.版本、 2.随机数(32位时间戳+28字节随机序列)、 3.会话ID、 4.客户支持的密码构件(CipherSuite)、 5.客户支持的压缩方法列表
  2. 然后,客户等待服务器的server_hello消息
  3. 服务器发送server_hello消息,参数: 1.客户机和服务器支持的最高SSL版本中的较低版本、 2.服务器产生的随机数、 3.会话ID、 4.服务器从客户建议的密码算法中挑出一套、 5.服务器从客户建议的压缩方法中挑出一个

第二阶段:服务器认证和密钥交换

5.jpg

  1. 服务器发送自己的证书,消息包含一个X.509证书,或者一条证书链 除了匿名DH之外的密钥交换方法都需要
  2. 服务器发送server_key_exchange消息 可选的,有些情况下可以不需要。只有当服务器没有向客户发送证书时,才发送此消息 向客户发送公钥(因为没有数字证书)
  3. 服务器发送certificate_request消息 可选的,如果server不是使用的匿名DH算法,可以向客户请求一个证书 包含证书类型和服务器认可的认证机构列表
  4. 服务器发送server_hello_done, 然后等待应答

第三阶段:客户认证和密钥交换

6.jpg

  1. 客户收到server_done消息后,它根据需要检查服务器提供的证书,并判断server_hello的参数是否可以接受,如果都没有问题的话,发送一个或多个消息给服务器
  2. 可选的,如果服务器请求证书的话,则客户首先发送一个certificate消息,若客户没有证书,则发送一个no_certificate警告
  3. 然后,客户机密钥交换,使客户机可以从相反的方向发送信息给服务器,客户机生成48位的premaster secret,用服务器公钥加密,发送给服务器
  4. 最后,客户发送一个certificate_verify消息,其中包含一个签名,对从第一条消息以来的所有握手消息的HMAC值。

第四阶段:结束

7.jpg

  1. 第四阶段建立起一个安全的连接
  2. 客户发送一个change_cipher_spec消息,并且把协商得到的CipherSuite拷贝到当前连接的状态之中
  3. 然后,客户用新的算法、密钥参数发送一个finished消息,这条消息可以检查密钥交换和认证过程是否已经成功。其中包括一个校验值,对所有以来的消息进行校验。
  4. 服务器同样发送change_cipher_spec消息和finished消息。
  5. 握手过程完成,客户和服务器可以交换应用层数据。