数字证书原理介绍

作者:陆金龙    发表时间:2022-12-12 22:06   

关键词:  

1.相关概念

1.1 公钥与私钥

公钥(Public Key)与私钥(Private Key)是非对称加密算法中的一个密钥对。

公钥可对会话进行加密(以及借此验证数字签名),只有使用对应的私钥才能解密会话数据。

公钥和私钥的使用:发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密

公钥使用中面临的问题:公钥替换。在非对称加密中,客户端需要获取服务端的公钥信息如果请求被第三方拦截的话,公钥信息就可能被替换,会导致客户端用第三方的公钥进行加密,交互信息存在泄露的风险。

1.2 证书

证书将持有者的身份信息与公钥关联,保证公钥确实是这个证书持有者的(关键作用),通过证书就可以确认持有者身份。

通信中引入证书,用于鉴别服务端的身份。如果服务端的身份鉴定失败,就终止请求。

1.3 CA

证书由权威的、公正的、可信任的第三方机构颁发,我们把证书的颁发机构称为CA(Certificate Authority)。

2.数字证书签发、验签

数字证书采用公钥密码体制,即利用一对互相匹配的密钥进行加密、解密。

每个用户拥有一把仅为本人所掌握的私有密钥(私钥),用它进行解密和签名;同时拥有一把公共密钥(公钥)并可以对外公开,用于加密和验证签名。

2.1 数字证书格式

X.509,也被称为Digital CertificateRFC5280定义的一种公钥证书格式)。

一张X.509包含一个Public Key和一个身份信息。X.509证书要么是自签发,要么是被CA签发。

把版本、序列号、发行方、过期时间、域名、公钥证书签名等信息合成在一个文件内,就叫数字证书。

2.2 证书签发

证书签名的加密解密与数据加密传输相反:证书签名是私钥加密、公钥解密

加密的过程就是对证书中包含的所有其他信息(不包括证书签名)进行Hash计算,得到一个Hash值,签发的CA机构使用自己的私钥将Hash值加密得到证书签名,一起放到证书文件里。证书里同时提供了证书持有者用于通信的公钥。

(如果是CA签发,就CA使用自己的私钥来生成证书签名。客户端使用CA公钥来解密证书签名。对于一个特定的CA机构,它的公钥是可以公开获取得到的。而证书中的公钥则是证书持有者的公钥,不是CA机构的那个验签的公钥)

2.3 证书验签

客户端从接收到的服务端的证书得到证书信息和证书签名2部分内容。

客户端会使用与服务端同样的Hash算法,获取证书信息的Hash值H1

客户端(例如浏览器)使用签发证书的CA机构的公钥,对证书签名解密,得到H2

比较 H1 和 H2,如果值相同,则为可信赖的证书,否则则认为证书不可信。

2.4 防止篡改逻辑

假设中间人篡改了证书的原文,由于他没有CA机构的私钥,所以无法得到此时加密后签名,无法相应地篡改签名。客户端(例如浏览器)依旧会使用CA机构的公钥来解密,会发现证书原文和签名解密后的值不一致。以下2点保证了证书不能被篡改:

  • 由于中间人没有CA机构的私钥来伪造证书签名,任何原文的篡改都会被发现。
  • 如果中间人使用自己的私钥来生成证书签名,客户端使用的公钥又不是中间人提供的公钥,解密证书签名后无法与证书信息的原文匹配,也不可行。

假设证书被劫持,整个证书被替换证另一个服务器的完整的证书,这是客户端就无法通过验签发现问题,因为证书能通过验签。这时候客户端会不会错误地使用这个顶替证书中的公钥呢?由于证书中包含了证书持有者的域名等信息,这些信息与客户端要请求的服务端信息不一致,因此也能识别这是一个被掉包的证书。

2.5 CA机构的公钥获取

证书的验签需要用到CA机构的公钥,那从哪里获取这些机构的公钥呢?

操作系统、浏览器本身会预装一些它们信任的根证书,如果其中会有CA机构的根证书,这样就可以拿到它对应的可信公钥了。

3.证书链

CA签发:上述证书签发过程中,如果证书中的发行方是一个权威的、公正的、可信任的第三方机构颁发机构,则证书是可信赖,因为机构本身权威、公正和可信(这种情况称为CA的根证书签发

如果证书中的发行方不是一个权威的、公正的、可信任的第三方机构,比如是自签发,则不一定可信。

实际上证书之间的认证也可以不止一层,可以A信任B,B信任C,以此类推,我们把它叫做信任链或数字证书链。如果通过数字证书链可以反推到可信任的CA机构的根证书,那这个签发机构也可以认为是可信的。

如果数字证书不是有CA机构直接签发,则验签证书的公钥就不是CA机构的公钥,而是这个签发机构的公钥。这个公钥存在该签发机构自己的数字证书里,它由上一级机构颁发。

中间证书的获取

首先,服务商要先向 CA 提出申请,这一流程往往是线下的商务流程,CA 会确认服务商的身份,若通过审核则为服务商颁发公钥,并将公钥信息与用户身份信息绑定;最后,CA 为绑定身份的公钥信息进行签名,签名结果即是证书,返还给申请者。