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

背景

通信的保障可以在网络的每一层上面做,比如应用层的有安全邮件协议(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. Java的四种权限修饰符

    private:仅对本类可见 缺省(不需修饰符):对本包可见 protected:对本包及所有子类可见 public:对所有类可见 修饰符: * 权限修饰符:private,默认的,protected ...

  2. 【docker系列2】docker 的前世今生

    Docker 入门,共 3 篇,将带大家进入 Docker 的世界.首先了解 Docker 的发展历程, 然后快速掌握 Docker 的基本使用: Docker 版本及内核兼容性选择是这部分的重点内容 ...

  3. CSS3新增伪类有那些?

    p:first-of-type 选择属于其父元素的首个元素 p:last-of-type 选择属于其父元素的最后元素 p:only-of-type 选择属于其父元素唯一的元素 p:only-child ...

  4. Java实现 蓝桥杯 算法提高 成绩排名

    试题 算法提高 成绩排名 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小明刚经过了一次数学考试,老师由于忙碌忘记排名了,于是老师把这个光荣的任务交给了小明,小明则找到了聪明的你, ...

  5. Java实现第八届蓝桥杯最大公共子串

    最大公共子串 最大公共子串长度问题就是: 求两个串的所有子串中能够匹配上的最大长度是多少. 比如:"abcdkkk" 和 "baabcdadabc", 可以找到 ...

  6. 用斗地主的实例学会使用java Collections工具类

    目录 一.背景 二.概念 1.定义 2.方法 2.1.排序方法 2.2.查找/替换方法 三.斗地主实例 3.1.代码结构 3.2.常量定义 3.3.单只牌类 3.4.玩家类 3.5.主程序 四.深入理 ...

  7. (九)DVWA之SQL Injection--SQLMap&Fiddler测试(High)

    一.测试需求分析 测试对象:DVWA漏洞系统--SQL Injection模块--ID提交功能 防御等级:High 测试目标:判断被测模块是否存在SQL注入漏洞,漏洞是否可利用,若可以则检测出对应的数 ...

  8. (三)linux三剑客之sed

    一.sed是什么? 二.sed的工作原理? 三.sed的基本用法? 四.sed的进阶使用? 一.sed是什么? sed 就是一个非交互式流编译器: 交互式:文件缓存.人工编译.全局并行可逆 非交互式: ...

  9. linux pinmux 引脚多路复用驱动分析与使用

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/code_style/article/de ...

  10. test for OCr