问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于 PKI 的数字证书身份认证体系

创作时间:
作者:
@小白创作中心

基于 PKI 的数字证书身份认证体系

引用
CSDN
1.
https://blog.csdn.net/anddddoooo/article/details/145781256

公钥基础设施(PKI)通过使用公钥技术和数字证书来提供系统信息安全服务,并负责验证数字证书持有者身份的一种体系。PKI基于非对称加密算法,其中公钥用于加密和解密数据,而私钥用于解密和签名数据。

对称加密

客户端和服务端使用同一个密钥key对数据进行加密解密,流程如下:

  1. 客户端使用密钥 key 加密数据发送给服务端。

  2. 服务端接收到加密的数据之后使用同一个密钥 key 解密成明文进行阅读。

非对称加密

服务端生成密钥对(公钥和私钥),并将公钥发给客户端,此时客户端只知道密钥对中的公钥,然后客户端使用此公钥加密一个会话密钥 Session Key 发送给服务端,服务端使用私钥解密数据成明文 Session Key。来实现后续的对称加密,具体流程如下:

  1. 客户端向服务端发送通信请求。

  2. 服务端向客户端发送密钥对中的公钥。

  3. 客户端生成会话密钥 Session Key,并将此 Session Key 进行公钥加密后发送给服务端。

  4. 服务端使用私钥解密,拿到 Session Key 之后,向客户端发送成功拿到会话密钥的响应。

  5. 客户端和服务端从此使用 Session Key 加密通信。

非对称加密的作用就是协商会话密钥Session Key。

数字签名

数字签名用于验证数据包传输过程中是否被篡改。服务端发送数据包给客户端,同时将数据包中的消息使用 hash 算法运算出散列值,然后将散列值使用私钥加密后放到数据包中,客户端接收的数据包后,使用公钥解密出散列值,然后使用相同的 hash 算法对数据包中的消息进行运算,然后将 hash 运算得到的散列值和公钥解密的散列值做比对,如果一样表明数据包没被篡改。

  1. 服务端将即将要发送数据包中的消息进行 hash 运算得到散列值,然后将此散列值进行私钥加密。

  2. 客户端接收到此加密数据包后。

  • 公钥解密数据包中的加密部分得到散列值。

  • hash 运算数据包中的消息得到散列值。

  • 将以上得到的两个散列值做比对以验证数据包中的消息是否被篡改。

此种情况,一般用于客户端验证服务端发送的数据是否被篡改,而不能用于服务端验证客户端的数据是否被篡改,因为客户端没有私钥。

中间人攻击

中间人伪装成服务端与客户端建立会话,同时伪装成客户端与服务端建立会话,从而客户端与服务器进行通信过程中,中间人能够监控客户端与服务端之间的通信,流程如下:

  1. 客户端向服务端发送通信请求。

  2. 中间人截获客户端的请求,并将自身伪造成客户端要访问的目标服务。

  3. 中间人将截获的请求发送到服务端,服务端响应后中间人将响应信息发给客户端。

在此情况下,中间人可在此会话中任意篡改客户端发送的数据包,非对称加密和数字签名都不能防止中间人攻击,因为中间人能够伪造密钥对来与客户端通信。

数字证书

也成为“公钥证书”,用于识别公钥所有者的电子文档。在中间人攻击过程中,客户端误把中间人当作正常的服务器,是因为客户端没有校验与中间人建立会话的证书。使用数字证书可以防御中间人攻击。

证书通常包括:

  • 可识别信息,例如证书持有者的姓名、证书的序列号及其到期日期。

  • 公钥副本。

  • 颁发 CA 的数字签名,用于证明真实性。

证书颁发机构 CA

创建和颁发数字证书的可信第三方组织。客户端校验目标服务器发来的证书需要证书颁发机构 CA 的介入。

从广义上讲,CA 有两种类型:

  • 根 CA: PKI 层次结构中最值得信赖的 CA 类型。 根 CA 的证书是自签名的,这意味着它是通过自己的数字签名进行身份验证的。 这些 CA 构成了信任的基础,因为它们的证书用于创建、签署和向从属 CA 或直接向终端实体颁发证书。

  • 从属 CA: 由根 CA 或链中更高层的从属 CA 认证的组织。 从属 CA 颁发的证书带有根 CA 的签名,因此继承了信任。 链中的每个证书都负责认证下一个证书的真实性,从而从上到下创建持续可靠的信任路径。

从属 CA 继承了根 CA 的信任,因为从属 CA 证书中携带根 CA 对它的数字签名。

证书链

下图为 https 的通信流程,其实就是证书校验+非对称加密。此标题下要讲解下图中浏览器判断证书的具体过程。

直接举个例子来解释浏览器是如何验证证书的:我们访问https://www.bilibili.com网站,此网站会返回的证书链包含两个证书,我们查看此证书的详细内容,如下图:

证书链所含如下:

  • .bilibili.com 的证书是用来证明 bilibili 服务器身份的*web 证书

  • GlobalSign RSA OV SSL CA 2018从属 CA 信任证书

其中,.bilibili.com 的证书是用来证明 bilibili 服务器身份的 web 证书,GlobalSign RSA OV SSL CA 2018这个证书是用来证明.bilibili.com这个证书是有效的,那么 GlobalSign RSA OV SSL CA 2018 这个证书也需要有其他证书来证明其有效性,这样的证书存在于我们的系统中,当我们的电脑安装完成操作系统的时候,这样的证书已经初始化在了我们的操作系统中,如下图就是初始化的根 CA 证书,他们在证书链的最顶端,GlobalSign RSA OV SSL CA 2018 这个证书就是下图中存在的某个证书验证其有效性的:

综上所述:

  1. GlobalSign Root CA 存在于我们的系统上,它验证了 GlobalSign RSA OV SSL CA 2018 这个证书的合法性。

  2. GlobalSign RSA OV SSL CA 2018 这个证书验证了 *.bilibili.com 这个证书的合法性。

  3. *.bilibili.com 证书用于 web 通信,此证书对应的密钥对就是客户端与服务端进行 https 非对称加密的密钥对。

证书校验

首先 *.bilibili.com 这个证书存在一个签名值,如下图:

生成此签名值所需要的私钥就是 GlobalSign RSA OV SSL CA 2018 这个证书对应的私钥,校验此签名值需要我们使用 GlobalSign RSA OV SSL CA 2018 这个证书对应的公钥,这个公钥就存在于GlobalSign RSA OV SSL CA 2018里面,如下图:

由此,使用这个公钥去验证 *.bilibili.com 证书中的签名,来对 *.bilibili.com 证书进行完整性校验,接下来使用相同的方式使用GlobalSign Root CA 证书内的公钥对 GlobalSign RSA OV SSL CA 2018 证书内的签名进行完整性校验,即可完成签名校验。

注:GlobalSign Root CA 这个证书内的签名值使用的私钥就是 GlobalSign Root CA 证书自己的私钥,具体情况如下:

  • *.bilibili.com 证书中的签名所使用的私钥是 GlobalSign RSA OV SSL CA 2018 证书对应的私钥。

  • 因此 *.bilibili.com 证书需要使用 GlobalSign RSA OV SSL CA 2018 证书的公钥进行完整性校验。

  • GlobalSign RSA OV SSL CA 2018 证书中的签名所使用的私钥是 GlobalSign Root CA 证书对应的私钥。

  • 因此 GlobalSign RSA OV SSL CA 2018 证书需要使用 GlobalSign Root CA 证书的公钥进行完整性校验。

  • GlobalSign Root CA 这个证书内的签名值使用的私钥就是 GlobalSign Root CA 这个证书自己的私钥。

  • 此 GlobalSign Root CA 证书位于证书链的顶端,它存在于系统之中,不需要其他证书来对其进行校验。

由此存在于我们操作系统上的根信任证书将信任传递到 web 证书,使我们能验证 web 证书的合法性。

总结:

  • *.bilibili.com 证书

  • 用于进行非对称加密通信的证书(此证书对应的密钥对进行非对称加密会话的建立)。

  • 中间 CA:GlobalSign RSA OV SSL CA 2018 证书

  • 此证书用于*.bilibili.com 证书的完整性校验(证书内部的公钥能够进行完整性校验)。

  • 根 CA:GlobalSign Root CA 证书

  • 此证书用于 GlobalSign RSA OV SSL CA 2018 证书的完整性校验(证书内部的公钥能够进行完整性校验)。

以上是证书的完整性校验,浏览器再通过验证证书链中所有证书的主题CN,就能够判断此证书所属公司,如下图:

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号