SSL通信详解

一、SSL协议的握手过程

开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手(handshake)。

假定客户端叫做爱丽丝,服务器叫做鲍勃,整个握手过程可以用下图说明(点击看大图)。

握手阶段分成五步。

第一步,爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。

第二步,鲍勃确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。

第三步,爱丽丝确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给鲍勃。

第四步,鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)。

第五步,爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成”对话密钥”(session key),用来加密接下来的整个对话过程。

上面的五步,画成一张图,就是下面这样。

二、私钥的作用

握手阶段有三点需要注意。

(1)生成对话密钥一共需要三个随机数。

(2)握手之后的对话使用”对话密钥”加密(对称加密),服务器的公钥和私钥只用于加密和解密”对话密钥”(非对称加密),无其他作用。

(3)服务器公钥放在服务器的数字证书之中。

从上面第二点可知,整个对话过程中(握手阶段和其后的对话),服务器的公钥和私钥只需要用到一次。这就是CloudFlare能够提供Keyless服务的根本原因。

某些客户(比如银行)想要使用外部CDN,加快自家网站的访问速度,但是出于安全考虑,不能把私钥交给CDN服务商。这时,完全可以把私钥留在自家服务器,只用来解密对话密钥,其他步骤都让CDN服务商去完成。

上图中,银行的服务器只参与第四步,后面的对话都不再会用到私钥了。

三、DH算法的握手阶段

整个握手阶段都不加密(也没法加密),都是明文的。因此,如果有人窃听通信,他可以知道双方选择的加密方法,以及三个随机数中的两个。整个通话的安全,只取决于第三个随机数(Premaster secret)能不能被破解。

虽然理论上,只要服务器的公钥足够长(比如2048位),那么Premaster secret可以保证不被破解。但是为了足够安全,我们可以考虑把握手阶段的算法从默认的RSA算法,改为 Diffie-Hellman算法(简称DH算法)。

采用DH算法后,Premaster secret不需要传递,双方只要交换各自的参数,就可以算出这个随机数。

上图中,第三步和第四步由传递Premaster secret变成了传递DH算法所需的参数,然后双方各自算出Premaster secret。这样就提高了安全性。

四、session的恢复

握手阶段用来建立SSL连接。如果出于某种原因,对话中断,就需要重新握手。

这时有两种方法可以恢复原来的session:一种叫做session ID,另一种叫做session ticket。

session ID的思想很简单,就是每一次对话都有一个编号(session ID)。如果对话中断,下次重连的时候,只要客户端给出这个编号,且服务器有这个编号的记录,双方就可以重新使用已有的”对话密钥”,而不必重新生成一把。

上图中,客户端给出session ID,服务器确认该编号存在,双方就不再进行握手阶段剩余的步骤,而直接用已有的对话密钥进行加密通信。

session ID是目前所有浏览器都支持的方法,但是它的缺点在于session ID往往只保留在一台服务器上。所以,如果客户端的请求发到另一台服务器,就无法恢复对话。session ticket就是为了解决这个问题而诞生的,目前只有Firefox和Chrome浏览器支持。

上图中,客户端不再发送session ID,而是发送一个服务器在上一次对话中发送过来的session ticket。这个session ticket是加密的,只有服务器才能解密,其中包括本次对话的主要信息,比如对话密钥和加密方法。当服务器收到session ticket以后,解密后就不必重新生成对话密钥了。

【寒江雪】SSL通信详解相关推荐

  1. HTTPS简介以及SSL协议详解

    HTTPS简介以及SSL协议详解 1.HTTPS简介 2.SSL协议介绍 2.1.SSL协议的功能 2.2.SSL协议在协议栈的位置 2.3.SSL协议组成 2.3.1.纪录协议的功能 2.3.2.S ...

  2. OS--进程间通信详解(二)

    OS–进程间通信详解(二) 文章目录 OS--进程间通信详解(二) 一.进程间通信 1.互斥量 Futexes Pthreads中的互斥量 2.管程 3.消息传递 消息传递系统的设计要点 用消息传递解 ...

  3. OS--进程间通信详解(一)

    OS–进程间通信详解(一) 文章目录 OS--进程间通信详解(一) 一.进程间通信 1.竞态条件 2.临界区 3.忙等互斥 屏蔽中断 锁变量 严格轮询法 Peterson 解法 TSL指令 4.睡眠与 ...

  4. Java串口通信详解(转)

    Java串口通信详解(转) 作者:denimcc 日期:2007-05-11 序言     说到开源,恐怕很少有人不挑大指称赞.学生通过开源代码学到了知识,程序员通过开源类库获得了别人的成功经验及能够 ...

  5. 【流媒体服务器Mediasoup】 NodeJs与C++信令通信详解及Linux下管道通信的详解(五)

    目录 前言 匿名管道进程间通信 进程间管道 的创建与图解 MediaSoup中的管道创建 MediaSoup Channel的创建 NodeJs和 C++ 管道通信的过程 MediaSoup 消息确认 ...

  6. 【STM32】标准库与HAL库对照学习教程八--串口通信详解

    [STM32]标准库与HAL库对照学习教程八--串口通信详解 一.前言 二.准备工作 三.通信的基本概念 1.通信方式 2.串行通信与并行通信 (1)串行通信 (2)并行通信 3.异步通信与同步通信 ...

  7. IIC通信协议(硬件实现IIC通信详解I)

    IIC通信协议 什么是IIC协议 协议层 起始信号和停止信号 数据的有效性 什么是IIC协议 I2C(Inter-Integrated Circuit)通讯协议是由 Phiilps 公司开发的两线式串 ...

  8. MATLAB与51单片机进行串口通信详解

    目录 一.51单片机与电脑进行串口通信 二.MATLAB串口通信函数 三.串口属性 四.示例Demo 4.1 MATLAB接收单片机发来的数据 4.2 MATLAB向单片机发送数据控制LED 五.总结 ...

  9. S5PV210串口通信详解

    S5PV210串口通信详解 S5PV210概述: S5PV210有4路独立,异步,串行的输入输出IO口,UART支持的通信速率达到3Mbps. 一个周期数据的组成:1位起始位,8位有效数据位,1位奇偶 ...

  10. android传递socket对象,Android Socket通信详解

    一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...

最新文章

  1. nginx_rtmp中解析sps和pps
  2. 用C++11的std::async代替线程的创建
  3. matlab gui实例_App Designer 自学实例8
  4. 应用发布前,需要注意事情
  5. TortoiseSVN文件夹及文件图标不显示的解决办法
  6. Win10自定义开始菜单磁贴背景颜色及图标
  7. 国美金融APP如何提前结清所有贷款
  8. android icon颜色转换工具,Android代码修改图标颜色
  9. 百度快照劫持的解决方法
  10. How to deploy a .Net assmebly for COM use through CAB on Web Page (转)
  11. 神仙科研夫妇!浙大博士夫妻赴耶鲁深造,如今归国任教985
  12. 极智AI | 全场景算力产品矩阵 看算能系列AI产品
  13. 如何将PDF删除水印?PDF删除水印的方法
  14. 自定义View入门实战案例详析 | 蜘蛛网DataShowView
  15. java毕业设计大学生创业众筹系统(附源码、数据库)
  16. 【杰理AC632n】
  17. 融汇悦生活赴港递交招股书:母公司依赖症难解,独立性存疑
  18. 天翼云应知应会认证重点知识手册
  19. python我的世界脚本方块_ScriptBlockPlus下载
  20. ijkplayer eclipse 运行错误解决java.lanBinary XML file line #16: Error inflating class tv.danmaku.ijk.media

热门文章

  1. 如何使用C++做个简单推箱子游戏
  2. stc和sac_SAC与短期边际成本SMC.PPT
  3. 《别做正常的傻瓜》 读书笔记
  4. 如何正确的使用国产杀毒软件
  5. 灰灰深入浅出讲解支持向量机(SVM)
  6. python实现匿名发邮件_Python 实现邮件发送功能(初级)
  7. 网络空间安全 渗透 攻防5(文件共享服务器)
  8. Broker启动历史数据加载
  9. 魔兽争霸lostTemple地图
  10. 魔兽争霸3 ce基址 偏移