SSL/TSL 原理( 握手原理和传输原理)
本文参考《计算机网络 自顶向下方法》
背景
通信的保障可以在网络的每一层上面做,比如应用层的有安全邮件协议(PGP pretty good privacy),传输层的有ssl,网络层的有IPsec。在越底层做网络安全保障,成本就越高。
通信的4要素
- 机密性(confidentiality):仅有发送方和希望的接收方能够理解传输报文的内容。做法:....
- 报文完整性(message integrity):确保通讯过程中报文内容没有被改动。做法....
- 端点鉴别(end-point authentication):发送方与接收方都应该能证实通讯过程涉及的另一方。 做法。。。。
- 运行安全性(operational security):客户端和服务端运行的主机是安全的。
SSL/TLS in Detail
SSL协议包括两个子协议:SSL记录协议和SSL握手协议,两个协议都处于TCP之上。
SSL握手协议准许服务器端与客户端在开始传输数据前能够通过特定的加密算法相互鉴别。
SSL记录协议主要完成分组和组合, 压缩和解压缩以及消息认证和加密等功能。SSL握手协议描述安全连接建立的过程, 在客户和服务器传送应用层数据之前, 完成加密算法、密钥加密密钥算法的确定以及交换预主密钥, 最后产生相应的客户和服务器MAC秘密、会话加密密钥等功能。

通讯保证
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.
- Version Number. 2 for SSL 2.0 ; 3 for SSL 3.0 ;3.1 for TLS.
- Randomly Generated Data. 随机码,用于生成MS(master secret)和MAC密钥
- Session Identification (if any). 有或者无,有则客户端传上一次session的id可以恢复session
- Cipher Suite. 客户端支持的密码算法列表,供服务器选择
- 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
Server Hello.
- Version Number. 服务器选择的版本
- Randomly Generated Data. 随机码,用于生成MS(master secret)和MAC鉴别码。此时服务端已经可以生成自己的MS,(master secret)后面会对比客户端生成的M,用于会话加密,是对称的。MAC密钥用于鉴别报文完整性。
- Session Identification (if any). 有3种情况,1无:说明这次是新session;2新的,表明是新session,可能是服务器恢复旧session失败导致;3旧的:服务器恢复session成功,这个id与客户端给的一样。
- Cipher Suite. 服务端选择的密钥算法
- Compression Algorithm. 服务端选择的压缩算法
Server Certificate. 服务端的公钥证书,包含公钥
Server Key Exchange. 通常没有,可选的,是一个暂时用于加密客户端发送的信息。仅仅用于服务端的公钥无法对信息加密
Client Certificate Request. 请求客户端的公钥,可选的。
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
- Client Certificate. 发送客户端公钥
- Client Key Exchange. 证书没问题,用双方选择的随机码生成pre-master secret,用服务端公钥加密后发送,用于会话加密,是对称密钥。
- Certificate Verify. 仅当客户端发送的自己公钥时会有。数字签名,客户端用自己私钥加密,服务端用客户端给的公钥解密,做端点鉴别。
- Change Cipher Spec. 告诉服务端已经用协商好的算法加密信息。
- Client Finished. 一段用服务端公钥以及加密信息的hash,如果服务端能解开,说明没问题
4. Server Final Response to Client
- Change Cipher Spec Message. 告诉客户端已经用协商好的算法加密信息
- 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)对比,就知道报文完整性。

应用场景
- 常见的电子网站
- 远程控制
- 数据库连接
- 邮件
小结
总的来说SSL具有强大的安全性能, 无需客户端安装额外的软件, 使用十分方便。目前应用中的SSL加密大部分只使用了单向认证, 为了提供全面的安全性, 双向认证必然会是SSL应用发展的一个趋势。
SSL/TSL 原理( 握手原理和传输原理)的更多相关文章
- 你的MySQL服务器开启SSL了吗?SSL在https和MySQL中的原理思考
最近,准备升级一组MySQL到5.7版本,在安装完MySQL5.7后,在其data目录下发现多了很多.pem类型的文件,然后通过查阅相关资料,才知这些文件是MySQL5.7使用SSL加密连接的.本篇主 ...
- 在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP
如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...
- TCP/IP 传输原理
TCP传输原理简单说明 TCP传输需要经过3次握手4次挥手. 三次握手 当客户端向服务端进行连接时,会发送一个SYN报文,请求服务端监听端口,服务端确认请求后,会向客户端发送ACK确认,客户端 ...
- TCP三次握手与DDOS攻击原理
TCP三次握手与DDOS攻击原理 作者:冰盾防火墙 网站:www.bingdun.com 日期:2014-12-09 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. ...
- IIS站点工作原理与ASP.NET工作原理
IIS站点工作原理与ASP.NET工作原理 一.IIS IIS 7.0工作原理图 两种模式: 1.用户模式(User Mode)(运行用户的程序代码.限制在特定的范围内活动.有些操作必须要受到Ker ...
- java中关于SSL/TSL的介绍和如何实现SSL Socket双向认证
一. SSL概述 SSL协议采用数字证书及数字签名进行双端实体认证,用非对称加密算法进行密钥协商,用对称加密算法将数据加密后进行传输以保证数据的保密性,并且通过计算数字摘要来验证数据在传 ...
- SSL协议的握手过程
SSL握手的目的 第一,客户端与服务器需要就一组用于保护数据的算法达成一致. 第二,它们需要确立一组由那些算法所使用的加密密钥. 第三,握手还可以选择对客户端进行认证. SSL 握手概述 SSL 握手 ...
- 【网络与系统安全】关于SSL/TSL协议的分析
前言 TSL协议的前身是由网景(Netscape)公司于1994年研发的安全套接字(Secure Socket Layer)协议.它建立在TCP协议栈的传输层,用于保护面向连接的TCP通信.实际TSL ...
- SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)
原文地址:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个 ...
随机推荐
- SourceTree 配置 GitLab
生成SSH 创建SSH,执行ssh-keygen -t rsa -C "youremail@example.com",会在.ssh目录下生成id_rsa.id_rsa.pub两个私 ...
- UDP和TCP 简单 区别
1.双方都是一种网络传输协议2.TCP需要建立连接,而UDP不需要建立连接(无连接传输)3.是否建立真实连接的特性,造成了双方可靠性的差距. @1 TCP属于可靠的传输协议:因为传输前双方建立好了连接 ...
- 跟着阿里学JavaDay04——Java基础语法(二)
一.Java运算符 运算符的简介 所有的程序开发,都是对数字的进行处理.而对数字的处理,一定会存在所谓的操作模式,而这些操作模式就被称为运算符. 算术运算符 对于算术运算符,我们主要掌握++,--的运 ...
- ES6-变量let和常量const
1.以往js变量 var 1.可以重复声明 2.无法限制修改(指不能声明常量) 3.没有块级作用域(指{}这样的) 2.现在ES6变量 let 不能重复声明-变量,可以修改,块级作用域 const 不 ...
- AUTOSAR-软件规范文档阅读
https://mp.weixin.qq.com/s/Jzm9oco-MA-U7Mn_6vOzvA 基于AUTOSAR_SWS_CANDriver.pdf,Specification of CAN ...
- 总结了一下css的部分基础知识点。---css学习笔记01
一. css基础 1. 什么是css 层叠样式表:层叠 2. css的三种使用方式 style 属性 --> <div style="css属性值"></d ...
- Java实现蓝桥杯算法提高 陶陶摘苹果
试题 算法提高 陶陶摘苹果 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30 ...
- Java实现 LeetCode 129 求根到叶子节点数字之和
129. 求根到叶子节点数字之和 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 12 ...
- Java实现洛谷 P2802 回家
P2802 回家 时间限制 1.00s 内存限制 125.00MB 题目描述 小H在一个划分成了n*m个方格的长方形封锁线上. 每次他能向上下左右四个方向移动一格(当然小H不可以静止不动), 但不能离 ...
- Java实现字符串转换成整数
1 问题描述 输入一个由数字组成的字符串,请把它转换成整数并输出.例如,输入字符串"123",输出整数123. 请写出一个函数实现该功能,不能使用库函数. 2 解决方案 解答本问题 ...