HTTPS RSA 握⼿解析


提纲

TLS握手过程


HTTP 由于是明⽂传输,所谓的明⽂,就是说客户端与服务端通信的信息都是⾁眼可⻅的,随意使⽤⼀个抓包⼯具

都可以截获通信的内容。

所以安全上存在以下三个⻛险:

    1.窃听⻛险,⽐如通信链路上可以获取通信内容,⽤户号容易没。

    2.篡改⻛险,⽐如强制植⼊垃圾⼴告,视觉污染,⽤户眼容易瞎。

    3.冒充⻛险,⽐如冒充淘宝⽹站,⽤户钱容易没。

HTTPS 在 HTTP 与 TCP 层之间加⼊了 TLS 协议,来解决上述的⻛险。

HTTPS与HTTP对比

TLS 协议是如何解决 HTTP 的⻛险的呢?

    1.信息加密: HTTP 交互信息是被加密的,第三⽅就⽆法被窃取;

    2.校验机制:校验信息传输过程中是否有被第三⽅篡改过,如果被篡改过,则会有警告提示;

    3.身份证书:证明淘宝是真的淘宝⽹;

可⻅,有了 TLS 协议,能保证 HTTP 通信是安全的了,那么在进⾏ HTTP 通信前,需要先进⾏ TLS 握⼿。TLS 的握⼿过程,如下图:


TLS握手过程

上图简要概述来 TLS 的握⼿过程,其中每⼀个「框」都是⼀个记录(record),记录是 TLS 收发数据的基本单位,类似于 TCP ⾥的 segment。多个记录可以组合成⼀个 TCP 包发送,所以通常经过「四个消息」就可以完成TLS 握⼿,也就是需要 2个 RTT 的时延,然后就可以在安全的通信环境⾥发送 HTTP 报⽂,实现 HTTPS 协议。

所以可以发现,HTTPS 是应⽤层协议,需要先完成 TCP 连接建⽴,然后⾛ TLS 握⼿过程后,才能建⽴通信安全的连接。

事实上,不同的密钥交换算法,TLS 的握⼿过程可能会有⼀些区别。这⾥先简单介绍下密钥交换算法,因为考虑到性能的问题,所以双⽅在加密应⽤信息时使⽤的是对称加密密钥,⽽对称加密密钥是不能被泄漏的,为了保证对称加密密钥的安全性,所以使⽤⾮对称加密的⽅式来保护对称加密密钥的协商,这个⼯作就是密钥交换算法负责的。接下来,我们就以最简单的 RSA 密钥交换算法,来看看它的 TLS 握⼿过程。

RSA 握⼿过程


传统的 TLS 握⼿基本都是使⽤ RSA 算法来实现密钥交换的,在将 TLS 证书部署服务端时,证书⽂件中包含⼀对公私钥,其中公钥会在 TLS 握⼿阶段传递给客户端,私钥则⼀直留在服务端,⼀定要确保私钥不能被窃取。

在 RSA 密钥协商算法中,客户端会⽣成随机密钥,并使⽤服务端的公钥加密后再传给服务端。根据⾮对称加密算

法,公钥加密的消息仅能通过私钥解密,这样服务端解密后,双⽅就得到了相同的密钥,再⽤它加密应⽤消息。

我⽤ Wireshark ⼯具抓了⽤ RSA 密钥交换的 TLS 握⼿过程,你可以从下⾯看到,⼀共经历来四次握⼿:


TLS握手

TLS 第⼀次握⼿

客户端⾸先会发⼀个「Client Hello」消息,字⾯意思我们也能理解到,这是跟服务器「打招呼」。

第一次握手

消息⾥⾯有客户端使⽤的 TLS 版本号、⽀持的密码套件列表,以及⽣成的随机数(Client Random),这个随机数会被服务端保留,它是⽣成对称加密密钥的材料之⼀。


TLS 第⼆次握⼿

当服务端收到客户端的「Client Hello」消息后,会确认 TLS 版本号是否⽀持,和从密码套件列表中选择⼀个密码套件,以及⽣成随机数(Server Random)。接着,返回「Server Hello」消息,消息⾥⾯有服务器确认的 TLS 版本号,也给出了随机数(Server Random),然后从客户端的密码套件列表选择了⼀个合适的密码套件。

第二次握手

可以看到,服务端选择的密码套件是 “Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256”。这个密码套件看起来真让⼈头晕,好⼀⼤串,但是其实它是有固定格式和规范的。基本的形式是「密钥交换算法 +签名算法 + 对称加密算法 + 摘要算法」, ⼀般 WITH 单词前⾯有两个单词,第⼀个单词是约定密钥交换的算法,第⼆个单词是约定证书的验证算法。⽐如刚才的密码套件的意思就是:由于 WITH 单词只有⼀个 RSA,则说明握⼿时密钥交换算法和签名算法都是使⽤ RSA;握⼿后的通信使⽤ AES 对称算法,密钥⻓度 128 位,分组模式是 GCM;摘要算法 SHA384 ⽤于消息认证和产⽣随机数;

就前⾯这两个客户端和服务端相互「打招呼」的过程,客户端和服务端就已确认了 TLS 版本和使⽤的密码套件,⽽且你可能发现客户端和服务端都会各⾃⽣成⼀个随机数,并且还会把随机数传递给对⽅。

那这个随机数有啥⽤呢?其实这两个随机数是后续作为⽣成「会话密钥」的条件,所谓的会话密钥就是数据传输时,所使⽤的对称加密密钥。

然后,服务端为了证明⾃⼰的身份,会发送「Server Certificate」给客户端,这个消息⾥含有数字证书。

数字证书

随后,服务端发了「Server Hello Done」消息,⽬的是告诉客户端,我已经把该给你的东⻄都给你了,本次打招呼完毕。

Serve Hello Done

TLS 第三次握⼿

客户端验证完证书后,认为可信则继续往下⾛。接着,客户端就会⽣成⼀个新的随机数 (pre-master),⽤服务器的 RSA 公钥加密该随机数,通过「Change Cipher Key Exchange」消息传给服务端。

Client Key Exchage

服务端收到后,⽤ RSA 私钥解密,得到客户端发来的随机数 (pre-master)。⾄此,客户端和服务端双⽅都共享了三个随机数,分别是 Client Random、Server Random、pre-master。

于是,双⽅根据已经得到的三个随机数,⽣成会话密钥(Master Secret),它是对称密钥,⽤于对后续的 HTTP请求/响应的数据加解密。⽣成完会话密钥后,然后客户端发⼀个「Change Cipher Spec」,告诉服务端开始使⽤加密⽅式发送消息。

通知使用加密方式发送消息

(从此处开始使用会话密钥通信)然后,客户端再发⼀个「Encrypted Handshake Message(Finishd)」消息,把之前所有发送的数据做个摘要,再⽤会话密钥(master secret)加密⼀下,让服务器做个验证,验证加密通信是否可⽤和之前握⼿信息是否有被中途篡改过。

摘要

可以发现,「Change Cipher Spec」之前传输的 TLS 握⼿数据都是明⽂,之后都是对称密钥加密的密⽂。

TLS 第四次握⼿

服务器也是同样的操作,发「Change Cipher Spec」和「Encrypted Handshake Message」消息,如果双⽅都验证加密和解密没问题,那么握⼿正式完成。最后,就⽤「会话密钥」加解密 HTTP 请求和响应了。

RSA 算法的缺陷


使⽤ RSA 密钥协商算法的最⼤问题是不⽀持前向保密。因为客户端传递随机数(⽤于⽣成对称加密密钥的条件之⼀)给服务端时使⽤的是公钥加密的,服务端收到到后,会⽤私钥解密得到随机数。所以⼀旦服务端的私钥泄漏了,过去被第三⽅截获的所有 TLS 通讯密⽂都会被破解。

为了解决这⼀问题,于是就有了 DH 密钥协商算法,这⾥简单介绍它的⼯作流程。

DH密钥交换

客户端和服务端各⾃会⽣成随机数,并以此作为私钥,然后根据公开的 DH 计算公示算出各⾃的公钥,通过 TLS握⼿双⽅交换各⾃的公钥,这样双⽅都有⾃⼰的私钥和对⽅的公钥,然后双⽅根据各⾃持有的材料算出⼀个随机数,这个随机数的值双⽅都是⼀样的,这就可以作为后续对称加密时使⽤的密钥。DH 密钥交换过程中,即使第三⽅截获了 TLS 握⼿阶段传递的公钥,在不知道的私钥的情况下,也是⽆法计算出密钥的,⽽且每⼀次对称加密密钥都是实时⽣成的,实现前向保密。

但因为 DH 算法的计算效率问题,后⾯出现了 ECDHE 密钥协商算法,我们现在⼤多数⽹站使⽤的正是 ECDHE 密钥协商算法

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

推荐阅读更多精彩内容

  • 一、HTTPS风险 1.1 风险一: 网络嗅探与监听 用wireshark抓包时发现,途径终端ip的所有http报...
    tsteam阅读 488评论 0 0
  • HTTP是什么 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互...
    foamzou阅读 4,781评论 1 53
  • 这算是我的第一篇博客了,也是第一篇技术博客。 最近项目需要将 http 改成 https 提高安全性,之前都没好好...
    fatto阅读 12,393评论 2 15
  • HTTPS可以看作是安全的HTTP,你可能听说过关于HTTPS的一些问题,比如什么握手,什么证书,加密之类的等等。...
    coolcao阅读 614评论 0 2
  • 网络安全篇,面对复杂多变的网络环境,我们需要掌握哪些关于网络安全的相关知识,聊一聊与网络安全相关的:HTTPS、S...
    godliness阅读 6,910评论 0 11