如何理解 HTTPS

常常都在据说 https ,在谷歌浏览器上浏览不是 https 的网站,都会提示网站不安全。那到底什么是 https ,之前大概了解过一点点,可是对它的原理则是很模糊,趁着此次做业的机会,好好看看一下协议的实现方式。算法

http

谈 https 以前先说一下 http, http 是位于应用层的网络协议,主要用于网络中数据的传输,可是 http 传输是明文传输,这意味着网络上的任何一我的均可以看到你发送了什么消息,接收了什么消息。若是世界上没有不怀好意的人,那这样确实没有什么问题,然而老是有一些变态,或者是坏蛋,喜欢躲在角落里偷窥别人的生活,以此来达到本身的目的。浏览器

加密的方式

为了防止被人偷窥,只能想办法加密传输的数据。从大的方面来讲,加密能够分为对称加密和非对称加密两种。安全

对称加密

对称加密很好理解,依靠一种加密算法,生成一个密钥,你能够用这一个密钥对须要加密的数据进行加密,也能够用这个密钥对数据进行解密。总之一个密钥就能完成全部事了,but 问题不在于加密算法,而在于这个密钥要怎么保存。想想,有没有在不经意间看到过别人输入密码?人是不可靠的,安全问题不能靠人来保证。网络

非对称加密

非对称加密跟对称加密差距就大了,非对称加密会生成一个公钥和一个私钥;公钥能够公开出来,任何人均可以看到,而且使用公钥对数据进行加密,可是解密只能用私钥来进行解密(理论上是这样)。这样就只须要保存好私钥就好了,若是须要和别人进行通讯,只须要把本身的公钥发送过去,这样就能够了。性能

选择

单对称加密

上面也有解释过,对称加密是不行的,密钥的保存是个大问题。学习

单非对称加密

单非对称加密应该是可行的,可是每次传输数据双方都须要进行非对称加密的解密运算。非对称加密从数学上保证了从公钥推导出私钥的难度是至关大的,要实现这样的效果,必然要通过大量的运算(与对称加密相比),这会形成大量性能的损耗。网站

创建会话

https 创建会话的认证过程也是很难的。ui

若是没有 CA

在没有 CA 的状况下,客户端和服务端须要创建链接。这时候的流程是怎么样的?加密

客户端 服务端
request 生成一个密钥对:k1 为公钥,k2 为私钥,
发送 k1 给客户端
用对称加密算法生成一个密钥"k",
使用 k1 来加密 “k”,得到密文“k3”,
发送给服务端
服务端用 “k2” 来解密 “k3”,得到 "k",
,而后就可使用 "k"做为密钥传送数据

问题?

上面这样的步骤就已经安全了吗???操作系统

看似是没有什么问题,但其实有一个很大的问题:身份认证。

你怎么知道你收到的公钥是网站发送给你的呢?在你和网站中间,若是有一我的把网站发给你的公钥拦截了,而后把本身的公钥发送给你,而后再把你发送的数据发送到网站。若是有想法,还能篡改你发送的数据,burpsuite 这种软件就是依靠这样的原理。比较官方的称呼叫作“中间人攻击”。

解决问题

既然问题是身份认证的问题,那就要想办法解决它。要证明双方的身份,那就须要引入公证人,在 https 中就是证书。一个机构,若是全世界都相信它,那咱们也能够选择相信它,也包括机构颁发的证书,所以只要机构足够权威,就能够用来证明网站的身份。

所以网站就不能向以前那样本身生成一个公钥,而后发送出去和客户端进行通讯了。网站的管理者须要向 CA 申请一个证书,证书中包括了公钥,私钥以及证书的有效信息,以保证证书的真实性和有效性。由于这些机构是足够权威的,所以操做系统和浏览器默认就安装了这些机构的证书,在进行身份认证的时候,会经过本地的证书进行校验,若是网站的证书是有效的,那就认为这次身份认证成功,能够进行数据传输了。

下面这个图是 TLS 握手的流程。
tls1.2

公众号:没有梦想的阿巧 后台回复 "群聊",一块儿学习,一块儿进步

相关文章
相关标签/搜索