从零设计一个HTTPS协议

背景

HTTP协议的网络传输是明文的,因此HTTP通信存在如下三个问题:

  • 被监听:在客户端与服务端的通信过程中,数据在链路的任何一点都有可能被劫持。比如请求中携带了账号和密码,一旦请求所经过的某个路由器被劫持,那么明文的账号和密码将会被暴露。

  • 被篡改:第三方对通信过程中的数据进行篡改。比如你向某银行服务端发起转账请求,第三方在请求所经过的某个路由器上将转账的账户和金额进行篡改,你的钱就被转入其他地方了。

  • 被伪装:对于客户端来说,你无法保证服务端是你认为的那个服务端。比如你在和某银行服务端通信,有可能你发出的所有请求都在某个路由器上被第三方劫持,第三方不再将这些请求向外转发,并且自己给你发送了响应。


    HTTP通信.png

鉴于HTTP协议的问题,我们需要基于HTTP设计一种安全的网络协议,来解决以上的问题。

对称加密

要解决以上问题,最先想到的就是对称加密。在HTTP层之下加一个加密层,用对称加密对发送的数据进行加密,对接收的数据进行解密。

加密之后,即使获取的数据被劫持,第三方也无法解密,这样就可以避免监听和篡改问题了。此外,由于第三方没有对称密钥,也无法伪装成服务端与客户端进行加密通信。


HTTP+加密通信.png

但是,客户端和服务端之间要如何沟通对称密钥呢?网络是不安全的,只能通过线下的方式来沟通密钥,但互联网中海量的客户端和服务端如何进行线下沟通呢?这显然不现实。

非对称加密

为了解决密钥沟通问题,我们可以使用非对称加密,非对称加密拥有一对密钥,分别为公钥和私钥,公钥加密的数据可以用私钥解密,私钥加密的数据可以用公钥解密。

于是客户端可以在网上向服务端暴露自己的公钥,服务端可以在网上向客户端暴露自己的公钥。当客户端向服务端发送数据时,用服务端公钥加密,服务端收到后用自己的私钥解密;服务端向客户端响应数据时,用客户端的公钥加密,客户端收到后用自己的私钥解密。

但是非对称加密有一个比较严重的问题,就是加密解密的速度比较慢,这会大大的影响客户端与服务端的沟通速度。

非对称加密+对称加密

我们可以结合两种加密方式,先用非对称加密进行对称密钥的沟通,再用沟通好的对称密钥对后续的通信进行加密。

到此,看似所有问题都已解决,但其实仍然有一个严重的隐患。在前文的对称加密通信中,我们提到过线下交换密钥,通过线下交换,我们不仅可以防止密钥暴露,还可以确认对方身份。但是在网上我们如何确认我们所获得得服务端公钥确实是该服务端的公钥,有没有可能第三方劫持了客户端的网络,将自己的公钥伪装成服务端的公钥发送给客户端,客户端的所有信息都用第三方的公钥加了密并发送了出去。这样的话,监听、篡改、伪装问题仍然无法得到解决。


公钥确认问题.png

所以,我们还有最后一个问题需要解决,即:我们如何确保客户端收到的服务端公钥确实是服务端的公钥?

CA(Certificate Authority)

既然在通信过程中,双方无法通过自身判断出对方确实是我期望的对方,那么我们就需要引入一个有公信力的第三方组织来帮助我们判断对方的真实身份。

CA通过线上或者线下的方式确认服务端的身份,并给服务端颁发证书,证书中包含服务端的公钥信息。此外,操作系统还内嵌了判断合法证书的方法。

于是,当客户端收到证书时,先判断证书是否合法,若合法就可以确认服务端的身份,并提取出证书中服务端的公钥。至此,客户端就可以确保收到的服务端公钥确实是服务端公钥,而不是第三方公钥了。

确认服务端公钥之后,再结合非对称加密生成对称密钥,再用对称密钥进行通信,就可以确保通信安全了。

总结

HTTPS全称为HTTP over SecureSocket Layer,即HTTPS为工作在安全层之上的HTTP。文中的加密层即所谓的安全层,而在实际的HTTPS协议中,安全层的协议有TLS和SSL。根据协议栈的分层原理,HTTP层对加密并无感知,安全层负责所有加密相关的功能。

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

推荐阅读更多精彩内容