一程序员
HTTPS协议一直是web开发,不管先后端都不可或缺的重要知识点,然而因为历史缘由,这个协议和知识点枯燥而繁多,若是看书和文字十分难懂苦涩。但又不得不掌握,怎么办呢?web
正好,从朋友小灰那里获得一片 利用漫画形式讲解https协议的有趣图文,你们看下加深理解。后端
什么是HTTP协议?浏览器
HTTP协议全称Hyper Text Transfer Protocol,翻译过来就是超文本传输协议,位于TCP/IP四层模型当中的应用层。安全
HTTP协议经过请求/响应的方式,在客户端和服务端之间进行通讯。网络
这一切看起来很美好,可是HTTP协议有一个致命的缺点:不够安全。加密
HTTP协议的信息传输彻底以明文方式,不作任何加密,至关因而在网络上“裸奔”。这样会致使什么问题呢?让咱们打一个比方:操作系统
小灰是客户端,小灰的同事小红是服务端,有一天小灰试图给小红发送请求。翻译
可是,因为传输信息是明文,这个信息有可能被某个中间人恶意截获甚至篡改。这种行为叫作中间人攻击。3d
如何进行加密呢?
小灰和小红能够事先约定一种对称加密方式,而且约定一个随机生成的密钥。后续的通讯中,信息发送方都使用密钥对信息加密,而信息接收方经过一样的密钥对信息解密。
这样作是否是就绝对安全了呢?并非。
虽然咱们在后续的通讯中对明文进行了加密,可是第一次约定加密方式和密钥的通讯仍然是明文,若是第一次通讯就已经被拦截了,那么密钥就会泄露给中间人,中间人仍然能够解密后续全部的通讯内容。
这可怎么办呢?别担忧,咱们可使用非对称加密,为密钥的传输作一层额外的保护。
非对称加密的一组秘钥对中,包含一个公钥和一个私钥。明文既能够用公钥加密,用私钥解密;也能够用私钥加密,用公钥解密。
在小灰和小红创建通讯的时候,小红首先把本身的公钥Key1发给小灰:
收到小红的公钥之后,小灰本身生成一个用于对称加密的密钥Key2,而且用刚才接收的公钥Key1对Key2进行加密(这里有点绕),发送给小红:
小红利用本身非对称加密的私钥,解开了公钥Key1的加密,得到了Key2的内容。今后之后,两人就能够利用Key2进行对称加密的通讯了。
在通讯过程当中,即便中间人在一开始就截获了公钥Key1,因为不知道私钥是什么,也无从解密。
是什么坏主意呢?中间人虽然不知道小红的私钥是什么,可是在截获了小红的公钥Key1以后,却能够偷天换日,本身另外生成一对公钥私钥,把本身的公钥Key3发送给小灰。
小灰不知道公钥被偷偷换过,觉得Key3就是小红的公钥。因而按照先前的流程,用Key3加密了本身生成的对称加密密钥Key2,发送给小红。
这一次通讯再次被中间人截获,中间人先用本身的私钥解开了Key3的加密,得到Key2,而后再用当初小红发来的Key1从新加密,再发给小红。
这样一来,两我的后续的通讯尽管用Key2作了对称加密,可是中间人已经掌握了Key2,因此能够轻松进行解密。
是什么解决方案呢?难道再把公钥进行一次加密吗?这样只会陷入鸡生蛋蛋生鸡,永无止境的困局。
这时候,咱们有必要引入第三方,一个权威的证书颁发机构(CA)来解决。
到底什么是证书呢?证书包含以下信息:
为了便于说明,咱们这里作了简化,只列出了一些关键信息。至于这些证书信息的用处,咱们看看具体的通讯流程就可以弄明白了。
流程以下:
1.做为服务端的小红,首先把本身的公钥发给证书颁发机构,向证书颁发机构申请证书。
2.证书颁发机构本身也有一对公钥私钥。机构利用本身的私钥来加密Key1,而且经过服务端网址等信息生成一个证书签名,证书签名一样通过机构的私钥加密。证书制做完成后,机构把证书发送给了服务端小红。
3.当小灰向小红请求通讯的时候,小红再也不直接返回本身的公钥,而是把本身申请的证书返回给小灰。
4.小灰收到证书之后,要作的第一件事情是验证证书的真伪。须要说明的是,各大浏览器和操做系统已经维护了全部权威证书机构的名称和公钥。因此小灰只须要知道是哪一个机构颁布的证书,就能够从本地找到对应的机构公钥,解密出证书签名。
接下来,小灰按照一样的签名规则,本身也生成一个证书签名,若是两个签名一致,说明证书是有效的。
验证成功后,小灰就能够放心地再次利用机构公钥,解密出服务端小红的公钥Key1。
5.像以前同样,小灰生成本身的对称加密密钥Key2,而且用服务端公钥Key1加密Key2,发送给小红。
6.最后,小红用本身的私钥解开加密,获得对称加密密钥Key2。因而两人开始用Key2进行对称加密的通讯。
在这样的流程下,咱们不妨想想,中间人是否还具备使坏的空间呢?
注:最新推出的TLS协议,是SSL 3.0协议的升级版,和SSL协议的大致原理是相同的。
转载自公众号:程序员小灰