https是如何运作的

97 阅读5分钟

大家都知道https比http安全,https = http + ssl/tls之类的...

但是https到底是如何运作的呢?以及https如何如何将中间人拒之门外的呢?

现在就带着大家一起理解https是如何运作的!

TLS

在开始讲https之前,我们需要了解https中的s,也就是tls

ssl是tls的前身 安全套接层

SSL出过三大版本,直到SSL3.0才被标准化为TLS(传输层安全协议),该SSL3.0就代表TLS1.0版本

现在主流的是TLS1.2

传输层安全协议,大家听名字就知道是和安全相关的,那么安全肯定也和加密相关.

TLS在握手过程进行加密.

我简述一下TLS(1.2版本)的我是过程,毕竟TLS握手不是重点

  1. browser 发送client_random,TLS版本,加密套件列表(该加密套件列表决定了握手剩下流程的加密方式)
  2. server 返回 server_random,确定TLS版本,需要使用的加密套件和证书,server_params
  3. browser 验证证书,生成secret.(这个secret就是通过client_random,server_params等计算出来的,具体请google)
  4. server 生成secert

TLS握手完毕后,https正式开始加密传输

HTTPS

为什么需要https? http不安全.

为什么不安全? http明文传输.

ok,我们只要清楚了https主要功能,接上来就好办了

https采用对称加密和非对称加密,划重点

对称加密

为了方便大家理解对称加密,我下面举一个例子

假设你是FBI,我是你的线人,我们只能通过发送消息进行传递情报.但是罪犯一直在监听你的手机,你如果收到了我不加密的内容被罪犯监听到,我就暴露了.此时我想通过把信息机密之后放给你,这个机密后的信息只能通过key解密,这个key有两个,但是我没有办法将key给你,陷入了僵局.

上述例子中,两个key就是对称加密中的A,B两把钥匙

情报就是我俩互相发送的消息

罪犯的监听指的就是中间人

为了解决这个问题,随之而来的就是非对称加密

非对称加密

非对称加密十分耗时

还是以上个例子为例,我想到了一个加密的办法,我准备两把不同的key,一把叫公钥,一把叫私钥.公钥加密的内容只有私钥能解开,私钥加密的内容公钥可以解开.我将公钥明目张胆的发给你,此时罪犯可能也监听到了,但是没关系.你发送给我的消息通过你收到的公钥进行加密后发给我,因为公钥加密的内容,只有私钥能打开,也就是说只有我能解开.

此时的非对称机密也有问题.

传输是双向的,上述情况只是你能安全的发送消息给我,而我不能安全的发送信息给你,因为公钥很可能罪犯也监听到了,所以需要优化

过了几天,我又想到了办法,我准备了两把私钥两把公钥,我返回FBI总部,将公钥A和私钥A给你,我自己留着公钥B和私钥B.然后返回罪犯窝点.一天,我发现了情况,我需要向你发送信息,我先将我自己拥有的公钥B发给你,然后你将自己拥有的公钥A发给我,之后我俩就用对方的公钥进行加密,然后用自己的私钥解密.

是不是很完美,在传输过程中,双方的私钥从始至终都没有泄露

但是https并没有使用这种方式,因为有更加好的

非对称加密 + 对称加密

https选择的加密方式

具体流程

  1. 服务器拥有公钥A私钥A
  2. 首次请求服务器将公钥发送给客户端
  3. 客户端生成一个秘钥X,并使用公钥加密这个秘钥(这个秘钥X就是对称加密两把钥匙的其中一把)
  4. 服务器使用私钥解密,得到秘钥X.
  5. 后续服务器开始和客户端使用秘钥X进行对称加密

十分完美?不,仍有漏洞

如果中间人劫持首次服务器发送的公钥,之后伪造一个公钥发给浏览器,浏览器使用这个假公钥加密秘钥X,中间人又劫持数据,使用自己的私钥解密这个使用假公钥加密的秘钥X,从而得到了秘钥X,再使用首次劫持的真公钥A加密后发给服务器,中间人就这样拿到了秘钥X

就此大家应该知道如何解决这个问题了,导致这个问题是因为客户端无法确定该公钥来自哪个服务器

CA由此而生

CA

可以理解为拨打114电话查询(零几年的时候遇到不知道的电话,可以拨打114进行查询,现在还可以吗?)

当客户端首次收到服务器的公钥后,拨打114电话,查询这个公钥是否来自指定服务器,如果不是,那么就是被劫持了,反之服务器也可以拨打114电话进行查询

该114电话就代表CA机构,所以数字证书都由CA颁发.

问题又来了!

当客户端在拨打114电话的时候被劫持了,这个电话打到了中间人手里,中间人告诉你这个公钥是真的.(手动狗头Dog 滑稽^v^)

实际上就是颁布证书的时候也是需要进行网络传输的,那么如何防止传输证书时被篡改

后面就是涉及到一些防伪,数字签名等的方式进行防篡改,有兴趣的小伙伴们可以google.

最后

以上内容希望可以帮助到大家,了解网络也是十分有趣的,和带恶人斗智斗勇.

如有错误,欢迎指出