本文参考《计算机网络 自顶向下方法》

背景

通信的保障可以在网络的每一层上面做,比如应用层的有安全邮件协议(PGP pretty good privacy),传输层的有ssl,网络层的有IPsec。在越底层做网络安全保障,成本就越高。

通信的4要素

  1. 机密性(confidentiality):仅有发送方和希望的接收方能够理解传输报文的内容。做法:....
  2. 报文完整性(message integrity):确保通讯过程中报文内容没有被改动。做法....
  3. 端点鉴别(end-point authentication):发送方与接收方都应该能证实通讯过程涉及的另一方。 做法。。。。
  4. 运行安全性(operational security):客户端和服务端运行的主机是安全的。

SSL/TLS in Detail

SSL协议包括两个子协议:SSL记录协议和SSL握手协议,两个协议都处于TCP之上。

SSL握手协议准许服务器端与客户端在开始传输数据前能够通过特定的加密算法相互鉴别。

SSL记录协议主要完成分组和组合, 压缩和解压缩以及消息认证和加密等功能。SSL握手协议描述安全连接建立的过程, 在客户和服务器传送应用层数据之前, 完成加密算法、密钥加密密钥算法的确定以及交换预主密钥, 最后产生相应的客户和服务器MAC秘密、会话加密密钥等功能。

参考安全套接字层协议(SSL)的分析与研究

通讯保证

SSL/TSL能保证通讯的3要素,机密性、报文完整性、端点鉴别。用到公开密钥密码、公开密钥密码、散列函数、数字签名。想看公开密钥、数字签名等原理,建议读者看《计算机网络 自动向下方法》或者其它文章。

MS: master secret,用于对称加密

MAC : message authentication key ,用于鉴别报文完整性。注意与链路层的MAC区别(媒体访问控制)

The Handshake Protocol

参考链接

  Client                                               Server

  ClientHello                  -------->
ServerHello
Certificate*
ServerKeyExchange*
CertificateRequest*
<-------- ServerHelloDone
Certificate*
ClientKeyExchange
CertificateVerify*
[ChangeCipherSpec]
Finished -------->
[ChangeCipherSpec]
<-------- Finished
Application Data <-------> Application Data

1. Initial Client Message to Server

Client Hello.

  1. Version Number. 2 for SSL 2.0 ; 3 for SSL 3.0 ;3.1 for TLS.
  2. Randomly Generated Data. 随机码,用于生成MS(master secret)和MAC密钥
  3. Session Identification (if any). 有或者无,有则客户端传上一次session的id可以恢复session
  4. Cipher Suite. 客户端支持的密码算法列表,供服务器选择
  5. Compression Algorithm. 客户端支持的压缩算法列表,供服务器选择

例子:

ClientVersion 3,1
ClientRandom[32]
SessionID: None (new session)
Suggested Cipher Suites:
   TLS_RSA_WITH_3DES_EDE_CBC_SHA
   TLS_RSA_WITH_DES_CBC_SHA
Suggested Compression Algorithm: NONE

2. Server Response to Client

  1. Server Hello.

    1. Version Number. 服务器选择的版本
    2. Randomly Generated Data. 随机码,用于生成MS(master secret)和MAC鉴别码。此时服务端已经可以生成自己的MS,(master secret)后面会对比客户端生成的M,用于会话加密,是对称的。MAC密钥用于鉴别报文完整性。
    3. Session Identification (if any). 有3种情况,1无:说明这次是新session;2新的,表明是新session,可能是服务器恢复旧session失败导致;3旧的:服务器恢复session成功,这个id与客户端给的一样。
    4. Cipher Suite. 服务端选择的密钥算法
    5. Compression Algorithm. 服务端选择的压缩算法
  2. Server Certificate. 服务端的公钥证书,包含公钥

  3. Server Key Exchange. 通常没有,可选的,是一个暂时用于加密客户端发送的信息。仅仅用于服务端的公钥无法对信息加密

  4. Client Certificate Request. 请求客户端的公钥,可选的。

  5. Server Hello Done. 说明hello结束,等待客户端回应。

server hello例子

Version 3,1
ServerRandom[32]
SessionID: bd608869f0c629767ea7e3ebf7a63bdcffb0ef58b1b941e6b0c044acb6820a77
Use Cipher Suite:
TLS_RSA_WITH_3DES_EDE_CBC_SHA
Compression Algorithm: NONE

3. Client Response to Server

  1. Client Certificate. 发送客户端公钥
  2. Client Key Exchange. 证书没问题,用双方选择的随机码生成pre-master secret,用服务端公钥加密后发送,用于会话加密,是对称密钥。
  3. Certificate Verify. 仅当客户端发送的自己公钥时会有。数字签名,客户端用自己私钥加密,服务端用客户端给的公钥解密,做端点鉴别。
  4. Change Cipher Spec. 告诉服务端已经用协商好的算法加密信息。
  5. Client Finished. 一段用服务端公钥以及加密信息的hash,如果服务端能解开,说明没问题

4. Server Final Response to Client

  1. Change Cipher Spec Message. 告诉客户端已经用协商好的算法加密信息
  2. Server Finished Message.

握手小结

经过上面握手,客户端与服务端都互相确认了身份,并且能够私密传输信息。其中服务端和客户端的公钥私钥是用于保证传输的随机码加密还有身份确认。当保证了随机码的加密传输,那就可以保证后来用于通讯的对称密钥的正确。最终双方共享着MS和MAC密钥

数据传输

握手之后,客户端和服务端都有了MS和MAC,他们能够通过TCP连接开始安全通讯。既然SSL/TSL是基于TCP,一种自然的思路是在TCP数据传输完之后再对数据进行验证,但如果发现有问题则可能需要重传所有数据。

其实SSL还会对数据进行分段,设信息是m,每一段信息加上MAC用于完整性检测,所以是(m,MAC);设对称密钥简称是s(不是ms,是MAC密钥),MAC = H(m+s)。这样服务端收到的是(m,H(m+s)),它通过m和s重新计算出H(m+s)与接收到的H(m+s)对比,就知道报文完整性。

应用场景

参考

  1. 常见的电子网站
  2. 远程控制
  3. 数据库连接
  4. 邮件

小结

总的来说SSL具有强大的安全性能, 无需客户端安装额外的软件, 使用十分方便。目前应用中的SSL加密大部分只使用了单向认证, 为了提供全面的安全性, 双向认证必然会是SSL应用发展的一个趋势。

SSL/TSL 原理( 握手原理和传输原理)的更多相关文章

  1. 你的MySQL服务器开启SSL了吗?SSL在https和MySQL中的原理思考

    最近,准备升级一组MySQL到5.7版本,在安装完MySQL5.7后,在其data目录下发现多了很多.pem类型的文件,然后通过查阅相关资料,才知这些文件是MySQL5.7使用SSL加密连接的.本篇主 ...

  2. 在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP

    如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...

  3. TCP/IP 传输原理

    TCP传输原理简单说明 TCP传输需要经过3次握手4次挥手.     三次握手 当客户端向服务端进行连接时,会发送一个SYN报文,请求服务端监听端口,服务端确认请求后,会向客户端发送ACK确认,客户端 ...

  4. TCP三次握手与DDOS攻击原理

    TCP三次握手与DDOS攻击原理 作者:冰盾防火墙 网站:www.bingdun.com 日期:2014-12-09   在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. ...

  5. IIS站点工作原理与ASP.NET工作原理

    IIS站点工作原理与ASP.NET工作原理  一.IIS IIS 7.0工作原理图 两种模式: 1.用户模式(User Mode)(运行用户的程序代码.限制在特定的范围内活动.有些操作必须要受到Ker ...

  6. java中关于SSL/TSL的介绍和如何实现SSL Socket双向认证

    一.        SSL概述 SSL协议采用数字证书及数字签名进行双端实体认证,用非对称加密算法进行密钥协商,用对称加密算法将数据加密后进行传输以保证数据的保密性,并且通过计算数字摘要来验证数据在传 ...

  7. SSL协议的握手过程

    SSL握手的目的 第一,客户端与服务器需要就一组用于保护数据的算法达成一致. 第二,它们需要确立一组由那些算法所使用的加密密钥. 第三,握手还可以选择对客户端进行认证. SSL 握手概述 SSL 握手 ...

  8. 【网络与系统安全】关于SSL/TSL协议的分析

    前言 TSL协议的前身是由网景(Netscape)公司于1994年研发的安全套接字(Secure Socket Layer)协议.它建立在TCP协议栈的传输层,用于保护面向连接的TCP通信.实际TSL ...

  9. SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)

    原文地址:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个 ...

随机推荐

  1. C#基础之方法的重载

    在C#语言中,方法的重载作用非常大,但是使用重载需要注意方法的签名,必须有一种要不一样,具体指的是: 1.方法的返回值类型 2.方法的形参类型 3.形参类型的顺序 4.形参的个数 4.泛型的类型< ...

  2. Hadoop Yarn REST API未授权漏洞利用

    Hadoop Yarn REST API未授权漏洞利用 Hadoop是一个由Apache基金会所开发的分布式系统基础架构,YARN是hadoop系统上的资源统一管理平台,其主要作用是实现集群资源的统一 ...

  3. Rocket - diplomacy - wirePrefix

    https://mp.weixin.qq.com/s/DVcA2UixnB_6vgI3SjZGyQ   调试wirePrefix方法.   1. 实现   wirePrefix用于调整名称格式,其实现 ...

  4. Java实现行列递增矩阵的查找

    1 问题描述 在一个m行n列的二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排列.现在输入这样的一个二维数组和一个整数,请完成一个函数,判断数组中是否含有该整数. 2 ...

  5. Java实现第九届蓝桥杯猴子分香蕉

    猴子分香蕉 题目描述 5只猴子是好朋友,在海边的椰子树上睡着了.这期间,有商船把一大堆香蕉忘记在沙滩上离去. 第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份藏起来继续睡觉. 第2只 ...

  6. Git Gui工具从远程克隆代码总是提示路径已经存在。问题完美解决!

    最近使用Git Gui工具从远程克隆代码总是提示路径已经存在,提示如下图, 原因是使用Git Guii克隆代码时的路径不能是选择一个已经建好的目录(D盘的project下的test文件夹是我提前建好的 ...

  7. MAC/VMware配置双机调试简述

    Configuration 注:建议提前备份所有修改内容,可能会导致无法开机. 我的测试环境: server: windows 10 + windbg client: windows 7 Server ...

  8. 练习C++的vector语法-约瑟夫问题

    //测试vector,约瑟夫问题 #include <iostream> #include <vector> using namespace std; int main() { ...

  9. CSAPP 5 - 优化程序性能

    CSAPP 5 - 优化程序性能 1. 概述 首当其冲的,还是要编写出好的算法和数据结构,优化内部结构 其次才是编写出能让编译器 易优化的,高效的可执行代码.这点在特定的机器上可能有着特定的不同的优化 ...

  10. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(五)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...