SSL握手过程详解

准备工作

【文档】对于一个协议来说,官方的RFC(Request for Comments)是最权威的。如果想要精通某个协议,详细阅读和理解RFC是必须的功课。SSL通信过程是TLS1.2的内容,RFC5246,应该死磕这个文档。

【工具】要想搞清楚通信握手过程的每一个细节,需要结合拦截的请求进行逐条的分析,此时必须使用wireshark这个工具,可以从这里下载。后面一些截图,即为该软件显示的通信信息。

【核心】SSL协议的核心是通过“握手”这个过程在服务器和客户端通过几个回合的沟通,以及非对称加密的方式各自生成主密钥(对话密钥,注意这个密钥从来不在网络上传播)。然后在握手之后的过程中,通过这个对话密钥进行加解密,并在网络上只传递密文。这篇就是逐条的讲述“握手(Handshake)”过程。

至于为什么不全程使用非对称加密方式处理数据,原因是非对称加密的性能比对称加密差很多,所以只要保证对称加密的主密钥安全,也就保证了通信过程的安全。

参考资料

如果说RFC是教材的话,以下一些大牛写的文章就是很好的教辅。

《使用wireshark观察SSL/TLS握手过程--双向认证/单向认证》
此文是主要参考资料,详细的讲述了每个环节,只是在此文基础上加入自己的理解形成了本篇。

《SSL协议详解》
此文对加密算法说的比较多,就握手协议来说不如上篇写的清楚,但在熟悉全过程的基础上,看懂也是没问题。

《图解SSL/TLS协议》
阮一峰大神的博客,主要在分析了DH算法和RSA算法的区别,也与我司环境一致,便于理解。

《非对称密码之DH密钥交换算法》
DH算法互相传递公钥,并通过对方的公钥和自己的密钥生成对话密钥,此文讲的图文并茂。

SSL握手过程

SSL的握手过程严格说是SSL协议的子协议,RFC5246(SSL V1.2)分为三个子协议,握手协议,记录协议(加密传输数据)和告警协议(用于告警和关闭连接)。握手过程实际就是握手协议的内容。

下图为wireshark中捕获的一个完整的握手过程,29为客户端,193为服务端。

SSL握手过程的命令

注意到这里有些在一行(叫做“多握手消息”),有些在多行,这个不是很清楚。

多握手消息

1. Client Hello

客户端发起会话,里面有以下两个信息最为重要

  1. 客户端随机数,用于生成主密钥;
  2. 客户端支持的密码套件列表,具体不展开,提供很多内容,关键看服务器端选哪个组合。

2. Server Hello

服务端产生第一次应答,里面同样有两个信息很重要

  1. 服务端随机数,用于生成主密钥;
  2. 确定密码套件(下图红框所示),这里就看出服务器将使用DH算法作为密钥交换算法,这在握手过程中会和RSA有所区别,注意这不是加密算法,AES_128_GCM才是,不在本文讨论范围内。
ServerHello内容

3. Certificate

服务端向客户端发送自己的证书,当前显示这是一个自签的证书(keytool工具生成)证书更多的是验证身份,其中包含了公钥,可用于RSA密钥交换算法的加密。

证书信息

4. Server Key Exchange

此处开始涉及到密钥交换算法,RSA不需要这步,而DH算法需要通过这步传递服务器公钥,并在客户端生成一个新的密钥对。仔细观察这部分内容和证书中的公钥似乎并不一样,这也是一个不太理解的地方

DH算法参数

5. Server Hello Done

一个空的指令,仅表示结束。

6. Client Key Exchange

在#4中获得了服务端的公钥,会根据DH算法生成一个新的密钥对(见参考资料)。客户端同样通过这个命令将密钥对里的客户端公钥发给服务端,仅限DH算法。

DH算法参数

7. Change Cipher Spec(客户端)

这步是一个提示,相当于客户端告诉服务端,改为加密的传输方式。这里隐含了一个操作,就是主密钥生成了!主密钥需要客户端随机数(#1),服务端随机数(#2),前主密钥(由#4获取的服务端公钥和客户端用其生成的密钥对中的的私钥生成),这三者共同生成,计算的方式可能和确定的密码套件有关。

8. Encrypted Handshake Message(客户端)

此步直译就是加密的握手信息,即从上一步开始,信息全部是加密的了,之前为明文。所以这步也代表着客户端握手过程的结束。

开始发送密文和加密的握手信息

9. Change Cipher Spec(服务端)

同样的,服务端也通过生成的前主密钥(自己的私钥和#6发来的客户端的公钥)加客户端随机数加服务端随机数生成主密钥。

10. Encrypted Handshake Message(服务端)

不再赘述。

开始发送密文
加密的握手信息

双向认证和单项认证

双向认证一般是在客户端验证服务端的基础上,加上服务端对客户端的验证,这要求

  1. 服务端明确提出要求,通过certificate request命令
  2. 客户端发送证书(certificate命令)和证书验证(certificate verify命令)

目前没有增加这块,所以暂时不写详细的实现了,可参阅其他资料。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • 目录 准备 分析2.1. 三次握手2.2. 创建 HTTP 代理(非必要)2.3. TLS/SSL 握手2.4. ...
    RunAlgorithm阅读 37,420评论 12 117
  • 一、作用 不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。 (1)窃听风险...
    XLsn0w阅读 10,362评论 2 44
  • 一、SSL协议的设计思想 上一篇文章通过三个例子说明了HTTP协议存在的三个安全性问题: 通信内容可以被窃听 通信...
    tsyeyuanfeng阅读 9,524评论 5 45
  • 互联网的通信安全,建立在SSL/TLS协议之上。 本文简要介绍SSL/TLS协议的运行机制。文章的重点是设计思想和...
    拉肚阅读 2,549评论 0 6
  • 7月底去的云南,去时啊就想着这次一定写一篇游记,把这一路的所见所闻,所思所想记录下来。可是想归想,现在都...
    彭嘉维zero阅读 1,298评论 0 2