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

背景

通信的保障可以在网络的每一层上面做,比如应用层的有安全邮件协议(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. Android系统签名简介

    apk的签名,简单说开发者可以通过签名 对应用进行标识和更新.包名在一个设备上是唯一的,这样可以避免被相同包名应用随意覆盖安装.这是一个非常重要的安全功能.系统中的签名文件,也是对系统中应用进行签名, ...

  2. [Objective-C] 014_Objective-C 代码规范指南

    本文参考引用(http://www.csdn.net/article/2015-06-01/2824818-objective-c-style-guide/1) 拥有良好的编码规范,能使我们的代码保持 ...

  3. 爱奇艺|B站|优酷|腾讯视频高清无水印视频下载方法(软件工具教程)

    导读:经常在大型视频网站平台上看到一些很价值和视频,希望能高清无水印下载到本地学习观看,今天小程序定制开发代码哥DaiMaGe6给大家分享一招免费下载全网高清无水印视频的方法. 高清无水印视频下载工具 ...

  4. appnium(一)简介

    一.appium简介 1,appium是开源的移动端自动化测试框架: 2,appium可以测试原生的.混合的.以及移动端的web项目: 3,appium可以测试ios,android应用(当然了,还有 ...

  5. 学习源码的第八个月,我成了Spring的开源贡献者

    @ 目录 我的经历 碰到的问题 1.担心闹乌龙 2.不知道要怎么提交 3.英文 4.担心问题描述的不清楚 给你的建议 我的经历 关注我的朋友都知道,关注两个字划重点,要考! 我最近一直在写Spring ...

  6. LeetCode 73,为什么第一反应想到的解法很有可能是个坑?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第42篇文章,我们来看看LeetCode第73题矩阵置零,set matrix zeroes. 这题的难度是Mediu ...

  7. UML ——区分类图中的几种关系.md

    目录 关联关系 (association): 聚合关系 (aggregation): 合成关系 (composition): 依赖关系 (dependency): 总结: 原文地址 http://ww ...

  8. Java实现 LeetCode 838 推多米诺(暴力模拟)

    838. 推多米诺 一行中有 N 张多米诺骨牌,我们将每张多米诺骨牌垂直竖立. 在开始时,我们同时把一些多米诺骨牌向左或向右推. 每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌. 同样地, ...

  9. Java实现 LeetCode 704 二分查找(二分法)

    704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1 ...

  10. Java实现 LeetCode 388 文件的最长绝对路径

    388. 文件的最长绝对路径 假设我们以下述方式将我们的文件系统抽象成一个字符串: 字符串 "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext" 表示 ...