Https建立安全传输原理

前言

http和https对于web developers来说肯定都不陌生,甚至是每天都在接触,然而在我接触的一些相关群体中(包括我自己),能准确说出http协议的各种头字段的含义、缓存原理,https建立安全连接过程的人很少。本文是我对最近学习的https知识点的一些整理。

关于HTTPS

HTTPS = HTTP+SSL/TLS(TLS是SSL的升级版), 即 HTTP 下加入 SSL 层进行通信加密,不经过SSL协议加密的HTTP通讯有以下几个问题:

  • 窃听风险(eavesdropping):第三方可以获知通信内容。
  • 篡改风险(tampering):第三方可以修改通信内容。
  • 冒充风险(pretending):第三方可以冒充他人身份参与通信。

SSL/TLS协议是为了解决这三大风险而设计的,希望达到:

  • 所有信息都是加密传播,第三方无法窃听。
  • 具有校验机制,一旦被篡改,通信双方会立刻发现。
  • 配备身份证书,防止身份被冒充。

HTTPS如何保证通信的安全性

首先讲下HTTP在通信过程,直接是明文传输,就像这样:


0.jpg

很明显, 你不想你的银行卡密码这么轻易的被黑客获取吧?于是想到对内容进行加密,客户端和服务端约定一种加密算法就行了,就像这样:


1.jpg

上面的加密方式中,通信双方使用同一种加密算法和密钥,这种加密方式称为对称加密,典型的对称加密算法有:DES、RC5、IDEA(分组加密),RC4(序列加密)

ok,现在乍看之下,内容加密之后银行卡密码没有暴露了,但是仅仅是这样还是有问题:试想,如果所有的客户端都使用同一种加密算法,那还加个毛线密?这种此地无银三百两的做法毫无实际意义。但是聪明的你很快也能想到,每个客户端都使用不同的加密算法吧!就像这样:


3.jpg

现在只要让客户端和服务器协议双方要用的加密算法就行了,就像这样:


4.jpg

嗯,好像还不错,但是客户端和服务器协商要用什么加密算法这条通信本身是没有加密的呀?还是存在被拦截并被破解密文的可能性。ok,现在需要对协商加密算法这条信息进行加密了,这里需要用到另一种加密方式了,我们称之为“非对称加密”:

非对称加密需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。私钥加密后的密文,只要是公钥,都可以解密,但是反过来公钥加密后的密文,只有私钥可以解密。私钥只有一个人有,而公钥可以发给所有的人。典型的算法有RSA,DSA,DH。

服务器和各个客户端的关系就像这样:


5.jpg

服务器拥有一把私钥,每个客户端在与服务器连接时,服务器会返回给客户端一把公钥,客户端通过自己手中的公钥加密后的密文,只有拥有私钥的服务器才能破解,所以此时需要客户端决定此后双方通信需要用到的对称加密算法,并用公钥进行加密后发送给服务器,协定好之后,双方就使用对称加密算法进行加密通信了。上述的过程大致如下图所示:


6.jpg

现在,通信时的加密过程已经差不多完美了,但是细心的人可能会发出疑问:一开始的公钥是服务器分发给各个客户端的,那如何保证分发的过程中公钥不被黑客劫持并伪造自己的公钥给客户端呢?就像这样:


7.jpg

这里就需要权威的机构进行认证了:CA机构数字证书(需要花钱购买的)。

数字证书如何工作

CA证书包含以下内容:

  • 证书颁发机构的名称
  • 证书的有效期
  • 公钥
  • 证书所有者(Subject)
  • 证书本身的数字签名
  • 指纹以及指纹算法
一、验证证书的有效性

浏览器默认都会内置CA根证书,其中根证书包含了CA的公钥。

  • 证书颁发的机构是伪造的:浏览器不认识,直接认为是危险证书;
  • 证书颁发的机构是确实存在的,于是根据CA名,找到对应内置的CA根证书、CA的公钥。用CA的公钥,对伪造的证书的摘要进行解密,发现解不了,认为是危险证书;
  • 对于篡改的证书,使用CA的公钥对数字签名进行解密得到摘要A,然后再根据签名的Hash算法计算出证书的摘要B,对比A与B,若相等则正常,若不相等则是被篡改过的;
  • 证书可在其过期前被吊销,通常情况是该证书的私钥已经失密。较新的浏览器如Chrome、Firefox、Opera和Internet Explorer都实现了在线证书状态协议(OCSP)以排除这种情形:浏览器将网站提供的证书的序列号通过OCSP发送给证书颁发机构,后者会告诉浏览器证书是否还是有效的。

里面涉及到一些比较重要的概念,比如数字签名,这里需要大致解释下什么是数字签名:

数字签名技术就是对“非对称密钥加解密”和“数字摘要“两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

简单说,数字签名有两种功效:

  • 能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。
  • 数字签名能确定消息的完整性。

关于数字签名,可以看看阮一峰翻译过的一篇文章,写得很通俗易懂:数字签名是什么

注意:数字签名只能验证数据的完整性,数据本身是否加密不属于数字签名的控制范围


安全地获取公钥

如上述,数字证书在HTTPS通信过程中扮演身份认证和密钥分发的功能,我们可以简单模拟一下客户端与服务器之间信息交换的过程:

  1. 客户端:hello,我要跟你(xxx.com)进行数据通信;
  2. 服务器:好的,我就是xxx.com,这是我的证书,里面有我的名字和公钥等各种信息,你验证下。
  3. 客户端:(查看证书上的信息是否有误,并根据上述验证方法验证证书的有效性,如果有问题,发出警告并断开连接),Di*6D&T^@BD#H75dJ (公钥加密后的内容,翻译:我们用DES和RSA加密算法进行之后的通信)
  4. 服务器:7HUW&@O#DD#G@B(对称加密后的内容,不翻译了)
  5. 客户端:UDW@J@DH&76589DHUD(对称加密后的内容)

至此,整个HTTPS的安全通信过程已经大致讲完了,当然,还有很多细节值得深挖,比如SSL协议的握手过程等,有时间再做更细致的整理。

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

推荐阅读更多精彩内容

  • 数字证书原理 - 无恙 - 博客园 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明...
    拉肚阅读 1,656评论 0 3
  • 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现...
    已认证用户阅读 3,816评论 1 4
  • 前言 文中首先解释加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的...
    sunny冲哥阅读 2,972评论 0 2
  • 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现...
    纳兰三少阅读 1,899评论 1 6
  • 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现...
    梅_梅阅读 278评论 0 0