https 之再了解

最近准备面试没时间更新,之前对https 还只是停留在一个表层,于是今天继续看了他的协议文档。对它有个重新的认识。

  互联网上传输数据,普遍使用的是超文本传输协议,即 HTTP (HyperText Transfer Protocol);HTTP 协议定义了一套规范,让客户端或浏览器可以和服务器正常通信,完成数据传输。但是,HTTP 使用明文传输,比如你输入账号/密码提交登录。这个直接就提交给服务器了。这很可能被中间人截取。所以就出现了https .
   对通信数据进行加密,即使被中间截取也无法获取数据,加密传输确实安全,但是客户端把数据加密后,服务器也是不能解密

对称加密

通信双方各有一把相同的钥匙(所谓对称),客户端把数据加密锁起来后,传送给服务器,服务器再用钥匙解密。同理,服务器加密后传输给客户端的数据,客户端也可以用钥匙解密
  加入一方把这个钥匙泄露了,我们的加密也不安全了。引出了——客户端在每次请求通信之前,先和服务器协商,通过某种办法,产生只有双方知道的对称密钥这个就是一个秘钥交换。通常是采取非对称加密。

RSA 密钥交换算法

  RSA 密钥交换算法需要客户端向服务器提供一个 Pre-Master-Key,然后通信双方再生成 Master-Key,最后根据 Master-Key 产生后续一系列所需要的密钥,包括传输数据的时候使用的对称密钥
简单而言,服务器可以生成一对不同的密钥(所谓非对称),一把私自保存,称为私钥;一把向所有人公开,称为公钥
这对密钥有这样的性质:公钥加密后的数据只有私钥能解密,私钥加密后的数据只有公钥能解密
非对称加密的一种经典实现叫 RSA 算法,这种加密算法最早 1977 年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的,RSA 就是他们三人姓氏开头字母拼在一起组成的

具体的交互过程:

客户端向服务器索取公钥 PublicKey;
服务器将公钥发给客户端(这里没有保密需求,因为公钥是向所有人公开的);
客户端使用服务器的公钥 PublicKey 把 Pre-Master-Key 加密成密文,传送给服务器;
服务器用私钥 PrivateKey 解密密文,获取到客户端发送的 Pre-Master-Key;
看起来很完美,但是第 2 步骤又引发了一个新问题:

由于互联网是公开的,服务器发送给客户端的公钥可能在传送过程中被中间人截获并篡改,因为中间人也可以生成一对非对称密钥,它会截获服务器发送的公钥,然后把它自己的公钥 MiddleMan-PublicKey 发送给客户端,进行欺骗

可怜我们的客户端,竟然信以为真!然后傻乎乎的把自己的 Pre-Master-Key 用 MiddleMan-PublicKey 加密后,发给中间人

怎么解决这个问题?

客户端怎么确定收到的公钥,真的就是服务器的公钥?
当客户端收到服务器发过来的证书后,只要证书不是伪造的,那么上面记载的公钥肯定也就是真的!
我们介绍一种防伪手段:签名(Signature)

我们在生活、工作过程中,经常遇到需要签名的情况:刷信用卡、签合同等,用来证明这是本人的行为。签名之所以可信,是因为理论上每个人的签名都有生理学基础,别人是无法伪造的,就像你的指纹一样

只要服务器发送的证书上有权威机构 Authority 的签名,就可以确信证书是颁发给服务器的,而不是谁伪造的

这就相当于,只要你的请假条上有领导的签名,那么 HR 就会确信领导已经审批同意你请假了

如果说人类签名使用纸笔,那么计算机的数字化签名怎么实现呢?

答案是使用非对称加密技术:
数字证书认证机构(Certificate Authority
,简称 CA
)生成一对公/私钥;
服务器将自己的域名、公钥等信息提交给 CA
审查;
CA
审查无误,使用私钥把服务器信息的摘要加密,生成的密文就是所谓签名(Signature);
CA
把服务器的信息、签名、有效期等信息集合到一张证书上,颁发给服务器;
客户端收到服务器发送的证书后,使用 CA
的公钥解密签名,获得服务器信息的摘要,如果和证书上记录的服务器信息的摘要一致,说明服务器信息是经过 CA
认可的

什么是信息摘要?简单来说,就是一段任意长的数据,经过信息摘要处理后,可以得到一段固定长度的数据,比如 32
字节,只要原始数据有任意变动,生成的信息摘要都不一样

但是,在第5
步骤又有一个新问题:客户端怎么知道 CA
的公钥?
答案:与生俱来
世界上的根 CA
就那么几家,浏览器或者操作系统在出厂的时候,已经内置了这些机构的自签名证书,上面记录他们的公钥信息,你也可以在需要的时候手动安装 CA
证书
以 Windows
系统为例:


系统信任的根证书

至此,HTTPS 通信过程已经很明朗了:
操作系统/浏览器 自带了 CA 根证书;
客户端因此可以验证服务器发送的证书真实性,从而获取到服务器的公钥;
有了服务器的公钥,客户端就可以把 Pre-Master-Key 传送给服务器;
服务器获取到 Pre-Master-Key 后,通过后续产生的对称密钥,就可以和客户端加密通信了。

总结
本文简述了 HTTPS 通讯过程的基本原理,涉及到了对称加密、非对称加密、信息摘要、签名、密钥交换等技术基础,以及发行机构、数字证书等概念
具体的 HTTPS 实现细节还要复杂得多,这里并没有展开讲,但是并不影响对 HTTPS 不熟悉的读者对原理有基本的认知
参考文献
传输层安全协议规范 https://tools.ietf.org/html/rfc5246
HTTPS 连接前的几毫秒发生了什么 http://www.moserware.com/2009/06/first-few-milliseconds-of-https.html
查看 Windows 系统根证书 https://technet.microsoft.com/zh-cn/library/cc754841.aspx

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

推荐阅读更多精彩内容

  • 目录 准备 分析2.1. 三次握手2.2. 创建 HTTP 代理(非必要)2.3. TLS/SSL 握手2.4. ...
    RunAlgorithm阅读 38,083评论 12 117
  • 一、作用 不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。 (1)窃听风险...
    XLsn0w阅读 10,508评论 2 44
  • 2018-Read-Record 记录我的2018学习历程 文中首先解释了加密解密的一些基础知识和概念,然后通过一...
    NinthDay阅读 11,270评论 8 105
  • 需求 “人们最初设计互联网时,很少考虑到安全。这样的结果是,核心通信协议本质上是不安全的,只能依靠所有参与方的诚信...
    thinkq阅读 1,001评论 0 3
  • 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现...
    已认证用户阅读 3,833评论 1 4