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

背景

通信的保障可以在网络的每一层上面做,比如应用层的有安全邮件协议(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 IO(十七)FIleReader 和 FileWriter

    Java IO(十七)FIleReader 和 FileWriter 一.介绍 FIleReader 和 FileWriter 是读写字符文件的便利类,分别继承于 InputStreamReader ...

  2. 15 . PythonWeb框架本质

    PythonWeb框架的本质 简单描述就是:浏览器通过你输入的网址给你的socket服务端发送请求,服务端接受到请求给其回复一个对应的html页面,这就是web项目.所有的Web应用本质上就是一个so ...

  3. Node.js躬行记(2)——文件系统和网络

    一.文件系统 fs模块可与文件系统进行交互,封装了常规的POSIX函数.POSIX(Portable Operating System Interface,可移植操作系统接口)是UNIX系统的一个设计 ...

  4. 关于ubuntu下使用l2tpvpn和远程桌面windows系统的测试

    一.背景: 2019年9月下旬到10月上旬,到海南澄迈福山度假.随身带的笔记本电脑中windows10系统因硬盘故障挂了,在另一块硬盘上的ubuntu18.04系统正常.因媳妇需要在10月1日远程回公 ...

  5. 从SpringBoot源码分析 主程序配置类加载过程

    1.@Import(AutoConfigurationPackages.Registrar.class) 初始SpringBoot 我们知道在SpringBoot 启动类上有一个@SpringBoot ...

  6. Java实现 LeetCode 538 把二叉搜索树转换为累加树(遍历树)

    538. 把二叉搜索树转换为累加树 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和 ...

  7. Java实现 蓝桥杯VIP 算法训练 删除多余括号

    算法训练 删除多余括号 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且 ...

  8. Java实现 洛谷 P1170 兔八哥与猎人

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  9. uniapp每隔几秒执行一下网络请求(h5端亲测可以,其他端未测试)

    methods: { //执行网络请求 run() { uni.request({ method: 'GET',//请求方式 url: ‘’//请求地址 }).then(res=>{ conso ...

  10. c#发布补丁

    日常开发维护项目中,可能会遇到发布后出现bug,或者忘记改配置文件等等问题,这个时候,可能就需要重新进行下发布,有的开发小伙伴可能会把编译后的代码文件整个替换.这样做虽然也可以实现发布,但是有几个弊端 ...