一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情。
网络协议系列 第1篇--网络分层,TCP/IP五层模型【掘金日新计划】
网络协议系列 第2篇--传输层工作原理【掘金日新计划】
网络协议系列 第3篇--TCP有哪些机制【掘金日新计划】
网络协议系列 第4篇--应用层HTTP发展史【掘金日新计划】
网络协议系列 第5篇--HTTPS原理【掘金日新计划】
网络协议系列 第6篇--网络协议串讲【掘金日新计划】
网络协议系列 第7篇--补充一些底层网络知识【掘金日新计划】
前言:每日革新自我、追求进步。积土而为山,积水而为海。本篇文章是应用层的第二篇,将探讨HTTPS的原理,以及浏览器缓存机制。
周尛先森
网络协议虽然是大家都应了解的基本知识,但网上很多相关文章总会忽略一些内容,没有阐明完整的逻辑脉络,我当年学习它的时候也废了挺大功夫。
网络分层、TCP协议、HTTPS中对称与非对称加密,除了了解“它是什么”,你是否有想过“为什么是它”?我认为理解了后者才真正理解了网络协议。
本文以问题的形式逐步展开,一步步揭开计算机网络的面纱,希望能帮助你彻底搞懂网络协议。
HTTPS比HTTP多了什么,为什么他更安全?
HTTPS也是基于HTTP通信,但利用SSL/TLS来加密数据包,弥补了HTTP用明文传输的特性,防止在传输过程中截获、篡改、伪造请求。HTTPS比HTTP多出来的S就是传输层安全性(TLS)或安全套接字层(SSL)。
什么是 SSL/TLS?
HTTPS通过加密数据来防止数据被窃取,用到的传输层安全性(TLS)或安全套接字层(SSL)就是加密的一种协议。这两个协议依赖于下面这几种算法:散列函数、对称加密、非对称加密,三种算法相互相成,互相拉依赖,最终共同实现加密内容的完整性,保密性,可用性,可控性和不可抵赖性。接下来我们先讨论下对称加密和非对称加密。
什么是 对称加密, 什么是 非对称加密?
在密码学当中,加密解密过程都需要用到密钥,明文用密钥加密,就得到了密文。而密文再次用秘钥解密就又得到了明文*。理论上拿不到秘钥,是无法把密文转换为明文的。
对称加密,就是指加密和解密时使用的秘钥都是用同样的秘钥。主要保证了秘钥的安全性,那么通信信息就能保证保密。
而非对称加密,相对于对称加密来说,非对称加密是一种改良加密方式。明文用公钥加密,只能用私钥解密,而相反如果明文用私钥加密,则要用公钥解密。公钥和私钥都是可以看成加解密的钥匙,公钥无非就是可以公开的钥匙,作用和私钥是相等的。
什么是 数字证书?
在使用非对称加密的时候,如何把公钥传给对方呢?可以把公钥存放在一个安全的地方,对方需要的时候自行下载。也可以在对方想要的时候传给对方。这两种方式有个缺点,就是可以有个中间人,将我的公钥截取了,然后换成他的公钥,和目标服务器通信。
这是就需要一个权威的证书机构,给我或者服务器分发权威证书,我们拿到这个证书,默认不怀疑证书的真假性。
而证书里面就包含着公钥,还有证书的所有者、发布机构、有效期。
你知道HTTPS工作模式吗?
非对称加密的性能不如对称加密,而对称加密的安全性又不如非对称加密。那我们可以取两者的优点吗?答案是可以的,接下来我们看看是怎么做的:
使用非对称加密传输公钥,此时,公钥只有传输双方拥有,所以接下来只使用对称加密,也能达到数据安全的需求。我们来看这张图:
图1(图片来源于网络)
可以简单总结为以下四个步骤:
-
c->s,客户端发起加密通信请求,这个请求通常叫做 ClientHello请求,告知自己支持的协议版本号,加密算法,压缩算法,以及一个用于生成后续通信密钥的随机数;
-
s->c,服务端响应,也叫作 ServerHello,确认加密通信协议,加密算法,以及一个用于生成后续通信密钥的随机数,还有网站证书;
-
c->s,客户端在收到上一步服务端的响应之后,首先会检查证书的颁发者是否可信任,是否过期,域名是否一致,并且从操作系统的证书链中找出该证书的上一级证书,并拿出服务端证书的公钥,然后验证签名和hash,如果验证失败,就会显示警告,我们经常在Chrome里面看到,“此网站有风险,是否继续什么的”。如果验证通过,客户端会向服务端发送一个称作 pre-master-key 的随机数,该随机数使用证书的公钥加密,以及编码改变通知(以后咋们就用协商的密钥堆成加密通信了),客户端完成握手。
-
服务端在收到上一步客户端请求之后,也会确认我以后发给你的信息可就加密了,并且完成握手。 此时,客户端有第一步自己生成的随机数,第二步收到服务端的随机数,第三步的 pre-master-key,服务端也是如此,他们就可以用这三个随机数使用约定的算法生成同一个密钥来加密以后的通信数据了。
小结
HTTPS综合了对称加密和非对称加密,取两者的优点,既保证传输安全,也保证传输效率。
最后,让我们一起加油吧!
都看到这了,不如顺手点个赞再走 ( *ˇωˇ* )