上一篇文章我们从实战的角度,做个根证书,然后基于根证书做了个应用证书,并配置到nginx中,并把根证书导入到客户端系统,使用浏览器访问的整个流程,本篇文章我们从理论的角度分析一下整个过程,下一篇文章我们分析一下浏览器和服务器端的交互过程。

浏览器,服务器,认证机构整体组织关系:

下面我们来通过证书的代表性应用场景来理解证书的作用。下图展示了Alice(浏览器)向Bob(服务器)发送密文的场景,在生成密文时所使用的Bob的公钥是通过认证机构获取的。认证机构必须是可信的,对于“可信的第三方”,下图中会使用Trent(认证机构)这个名字,这个词是从trust(信任)一词演变而来的。

ca证书数字证书原理(数字证书与CA认证机构关系)(1)

浏览器,服务器,认证机构整体组织关系图

下面让我们对照着上图来看一看这些步骤具体都做了些什么。

1.Bob生成密钥对

要使用公钥密码进行通信,首先需要生成密钥对。Bob生成了一对公钥和私钥,并将私钥自行妥善保管。在这里,密钥对是由Bob自己生成的,也可以由认证机构代为生成。

2.Bob在认证机构Trent注册自己的公钥

在这里Bob则将公钥发送给了认证机构Trent,这是因为Bob需要请认证机构Trent对他的公钥加上数字签名(也就是生成证书)。

Trent收到Bob的公钥后,会确认所收到的公钥是否为Bob本人所有。

3.认证机构Trent用自己的私钥对Bob的公钥施加数字签名并生成证书

Trent对Bob的公钥加上数字签名。为了生成数字签名,需要Trent自身的私钥,因此Trent需要事先生成好密钥对。

4.Alice得到带有认证机构Trent的数字签名的Bob的公钥(证书)

现在Alice需要向Bob发送密文,因此她从Trent处获取证书。证书中包含了Bob的公钥。

5.Alice使用认证机构Trent的公钥验证数字签名,确认Bob的公钥的合法性

Alice使用认证机构Trent的公钥对证书中的数字签名进行验证。如果验证成功,就相当于确认了证书中所包含的公钥的确是属于Bob的。到这里,Alice就得到了合法的Bob的公钥。

6.Alice用Bob的公钥加密消息并发送给Bob

Alice用Bob的公钥加密要发送的消息,并将消息发送给Bob。

7.Bob用自己的私钥解密密文得到Alice的消息

Bob收到Alice发送的密文,然后用自己的私钥解密,这样就能够看到Alice的消息了。

上面就是利用认证机构Trent进行公钥密码通信的流程。其中1、2、3这几个步骤仅在注册新公钥时才会进行,并不是每次通信都需要。此外,步骤 4 仅在Alice第一次用公钥密码向Bob发送消息时才需要进行,只要Alice将Bob的公钥保存在电脑中,在以后的通信中就可以直接使用了。

为什么需要 CA 认证机构颁发证书,主要为防止”中间人“攻击,同时可以为网站提供身份证明。

参考资料:

https://blog.csdn.net/lk2684753/article/details/100160856

,