一文看懂HTTPS

Posted by Beyonderwei on 2021-04-28
Words 2.1k and Reading Time 7 Minutes
Viewed Times

一、基础知识

  • 对称加密: 只有一个密钥,可以对数据进行加密,也可以对加密的数据进行解密,加密解密速度快,但是安全性相对较低。
  • 非对称加密: 有一对密钥,私钥加密的数据只能通过公钥来解密,公钥加密的数据只能通过私钥来解密
  • CA(认证机构): 与各个操作系统厂商之间协商好了,操作系统如安卓、windows等都在出场时添加了这些CA的公钥(windos在控制面板/网络和Internet/Internet选项/内容/证书/中间证书颁发机构)
  • Client (浏览器): 即操作系统的浏览器
  • 操作系统: 浏览器所在的客户端,实际上可以将浏览器和操作系统合在一起。
  • Server (服务器): 网站的后端服务
  • 证书: 由CA(认证机构)颁发给服务端的,用于浏览器对服务器的验证。(下面详细解释)

二、图解说明

1. 密钥

        密钥包含三组,分别为服务端的公钥和私钥、认证机构的私钥和公钥,浏览器与服务器通信所用的随机密钥。(重要:私钥之所以称为私钥,是不会让外人知道的

  • 服务器公私钥: 包括S.私钥、S.公钥,用于与浏览器之间交换随机密钥(非对称加密的密钥),为什么要交换在后面问题汇总中解释。
  • 随机密钥: 主要通信过程中的加密密钥,用于对HTTPS通信过程中数据的加密。
  • CA 公私钥: 包括CA.私钥,CA.公钥,用于对服务端进行签证,最后用于对浏览器对服务器的认证。

    2. 证书

            证书,实际上就是一些数据,主要包括下面几部分内容:
  • 服务器公钥(通过CA的私钥加密了的)
  • 签证公司:直接是明文,比如Globalsign,用于从操作系统中找到CA的公钥
  • 服务器域名(通过CA的私钥加密后的)

    三、 流程图

    先了解一下整个流程,然后再去思考为什么这样设计。
    在这里插入图片描述

  • ① 申请证书:服务端向CA机构申请证书,申请条件包括网站的域名(IP)服务端的公钥等信息,CA对服务端进行核实后,认定这是一个合法的公司,因此颁发认证。

  • ② 返回证书:返回证书,证书内容在第二部分说到过(回去重温一下)

  • ③ 客户端第一次通过HTTPS访问服务器:HTTPS 通过443端口(默认端口)访问服务器

  • ④ 返回CA颁发的证书以及自己的公钥。

  • ⑤ 验证证书:浏览器根据证书中签证公司的名字,找到存储在操作系统中的CA.公钥,然后通过公钥对证书进行解密(因为证书是被CA.私钥加密过的),因此能够拿到S.公钥和服务器域名等信息。通过验证能确定这是否是一个合法的证书。

  • ⑥ 浏览器生成一个随机密钥(对称加密),用于后序通信,随机密钥和随机密钥的加密方式通过S.公钥加密后发送给服务端,该随机密钥只能通过S.私钥解开。

  • ⑦ 服务端通过S.私钥解密,得到随机密钥,并作为后序的通信

  • ⑧ 返回确认,确认收到随机密钥,然后后序的通讯中的数据便通过随机密钥来加密,而这随机密钥是浏览器和服务端都知道的方式。

  • ⑨ 相互通信,此时的通信内容通过随机密钥加密

四、问题解答

        带着思考去看下面的问题,明白了下面的问题,那边便能够理解为什么HTTPS 流程如此设计

1. 操作系统为什么能够提前存有CA公钥

        理解了上面的流程,你可能会有一个疑问,是不是任何有一对私钥和公钥的人都可以对服务端颁发证书呢?确实如此,但是并不是任何人的公钥都会装在操作系统之中,这些CA机构都是与操作系统厂商之间有合作(联结),如windows下就有这些证书:比如GloableSign
在这里插入图片描述
如果你自己搞了一套这种CA认证,你的证书就不会装入到所有的操作系统之中。

2. 服务器的私钥和公钥有什么作用

作用: 用来与客户端之间交换随机密钥,这样通过服务端公钥加密的随机密钥,只能由服务端解开,因此这个随机密钥的传输就安全了。

解释: 交换了随机密钥以后,通过随机密钥进行后续的所有通信数据加密,因为这对密钥只有服务端和浏览器知道,因此保证了数据安全。你可能会想,为什么不一直使用服务端的公私钥通信呢?答案在下面一个问题。

3. 为什么不一直使用服务端的公私钥通信呢

非对称加密: 由于公私钥的加密方式属于非对称加密,安全性得到了保证,我把公钥告诉浏览器,而加密的数据只有我拿私钥才能解开。但非对称加密算法无论是加密或者解密过程都将消耗更多的时间和更多的算力,无疑为通信过程添加了多的负担,也导致通信速率的下降。

对称加密: 既然非对称加密会导致效率下降,那么我们使用对称加密呢?虽然对称加密的加密过程和解密过程都速度很快,但是在传输密钥的过程中窃听者将传递的密钥截获,那么后序的加密实际上相当于是透明的,没有加密的效果了。

解决方案: 因此一个组合的方式,在交换随机密钥(对称加密)的时候通过服务端的非对称加密来交换随机密钥,而通信的过程采用对称加密的方式加密数据就解决了上述问题。

疑问(重要): 但是问题真的就这样解决了嘛? 那么还要认证机构干什么?认证机构起到了什么作用。

4. 认证机构到底起到了什么作用(重要)

作用: 起到的是客户端对服务器的认证,即浏览器可以根据证书判断,这个服务器是我要访问的合法服务器。

        上图中可以发现,服务端的公钥和CA的公钥实际上都会被窃听者拦截得到,但是窃听者并没办法获取到服务端的私钥,因而就没办法破解出通信所使用的随机密钥。但是你可能会说,即使没有认证机构,那么服务端的私钥也不会被泄露啊?这就涉及到了另外一种窃听的方式:

        窃听者可以伪造一套自己的私钥和公钥,来模拟成一个假的服务端,倘若没有认证机构的认证,那么浏览器就无法判断与自己通信的这个服务端到底是不是我们想要访问的合法的服务端,如果一旦与伪造服务端的窃听者之间进行通信,那么数据的安全就没办法得到保障了。而这才是认证机构真正的作用。

        因为合法的服务器发送给浏览器的 S.公钥 等数据,这些数据是通过 CA.私钥 加密的,只有 CA.公钥 才能解开,而通过 CA.私钥 加密过得证书都是通过CA认证了,确保了这家公司的合法性,一旦从事非法窃取,那么便能够追踪溯源,从而保证了安全。


本文为作者原创文章,未经作者允许不得转载。

...

...

00:00
00:00