不懂数字证书?看这篇文章就行了

云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


希望通读这篇文章,初学者可以较为深入的了解数字证书的发展、原理及应用,熟练者可以查漏补缺。

如果想要了解HTTPS协议,那么数字证书就是一个逃不过的坎,在HTTPS协议握手加密过程中,数字证书有着举足轻重的地位。

本文将从以下几个方面展开:

1.加密/解密的基础概念

2.数字证书的构成及原理

3.数字证书的应用——HTTPS协议

加密/解密的基础概念

密钥: 一般就是一个字符串或数字,在加密或者解密时传递给加密/解密算法

对称加密算法(symmetric key algorithms):加密和解密使用相同密钥的加密算法。因此对称加密算法对密钥安全性要求非常高,如果密钥泄露,消息就等于明文传输。常见的对称加密算法有AES、DES等。

非对称加密算法(asymmetric key algorithms):加密使用的密钥和解密使用的密钥不相同的加密算法。非对称加密算法中,会生成一对公钥和私钥,公钥和加密算法会公开使用,但是私钥绝对保密。私钥加密的密文可以公钥使用者解密,而公钥加密的密文只有私钥才能解密。常见的非对称加密算法有RSA、ECC(椭圆曲线加密算法)等,其中RSA使用最广泛。

对称加密算法的速度一般远高于非对称加密算法。所以一般加密通信是采用非对称加密算法交换对称加密算法密钥,再使用对称加密算法进行数据加密通信。但这种方式的一个难点就是如何将公钥和算法安全且正确“给到”使用者手上。

假如在通信过程中,黑客拦截客户端与服务器之间的通信成为中间人,将自己的公钥发送给客户端,如果客户端没有能力识别公钥是否来自真正的服务器,那么数据就会泄露。如同下面这种情况,引自数字证书原理:

不懂数字证书?看这篇文章就行了

数字证书就是用来解决这个问题的,它让客户端有能力去识别公钥是否来自合法的服务器。

数字证书的构成和原理

证书的构成

不懂数字证书?看这篇文章就行了

证书的构成内容比较多,包含颁发者、使用者(持有者)、有效期、公钥等,下面讲一讲重要的信息:

1.颁发者(证书的发布机构)

不懂数字证书?看这篇文章就行了

表示该证书是哪个机构发布的,这个机构是证书链非常重要的一环。对于图中的证书而言,"GeoTrust RSA CA 2018"就是这个机构。一般而言这些机构都是极具信誉的大机构。

2.有效期从, 到 (证书的有效期)

不懂数字证书?看这篇文章就行了

表示该证书的有效期。比如该证书就是‎2018‎年‎11‎月‎7‎日 8:00:00至‎2020‎年‎11‎月‎6‎日 20:00:00,超过期限证书就会作废,需重新申请

3.公钥(证书持有者的公钥)

用于加解密传输的消息,从图中可以看到这个证书的公钥是2048位的,就是一长串16进制的数字

4.使用者(证书持有者)

不懂数字证书?看这篇文章就行了

表示证书的持有者,或者说证书颁发的对象,一般包括公司、机构或者网站名等。图中证书使用者就是北京创新乐知信息技术有限公司旗下的*.csdn.net网址。

5.签名哈希算法(指纹算法,摘要算法)

不懂数字证书?看这篇文章就行了

对证书主体内容进行哈希的算法,可以获得证书主体内容的摘要。这个摘要就是证书的指纹,最终用于证书数字签名和证书认证。

6.指纹

不懂数字证书?看这篇文章就行了

一个散列值,主要功能是确认证书完备性,即确认证书未被篡改。

7.签名算法

不懂数字证书?看这篇文章就行了

数字签名所使用的加密算法,使用CA的私钥加密。

8.证书的签名-验签过程

不懂数字证书?看这篇文章就行了

  • 签名

使用签名哈希算法(指纹算法,如sha256)计算证书颁发者信息、证书持有者信息、证书有效期、证书持有者公钥等信息并生成证书摘要(即指纹α,一串散列值);

颁发者生成一对私钥和公钥,使用私钥对指纹加密,加密后的数据就是颁发者的数字签名γ;

将数字签名γ“附加”到数字证书上,变成一个签过名的数字证书;

颁发者将签过名的数字证书和公钥一起给到证书持有者。

  • 验签

使用者通过某种途径(如浏览器访问)拿到签过名的数字证书,解析后可以获得数字签名γ和数字证书;

使用者使用数字证书中的指纹算法计算一遍数字证书相关内容,生成一个指纹β;

同时使用通过某些方式拿到的颁发者的公钥解密数字签名,拿到解密后的指纹α;

对比两个指纹α和β,如果相同,表明证书合法,可以信任并使用该证书中的信息(如持有者的公钥)。

在签名-验签流程中,一个核心是确保颁发者是可信的,即保证使用者拿到的公钥是证书颁发者的,那么如何确保颁发者是可信的呢,这就涉及到了证书链。

证书链

不懂数字证书?看这篇文章就行了

上图所示证书路径就是一条证书链,它包含三个部分:

  • root:根证书,权威证书认证机构(CA, Certificate Authority)给自己颁发的数字证书,也就是自己认证自己。在上图中就是根证书就是由就是DigiCert Global Root CA自己给自己签发的。
  • intermediates:中间证书,根CA生成一对公钥、私钥,并用私钥将中间CA的信息和公钥进行“加密”生成签名,封装得到中间证书。需要注意的是,中间CA可能不止一个。上一级CA同样按照这个逻辑给下一级CA进行签发证书。在这里中间CA就是GeoTrust RSA CA 2018,它给末端使用者签发证书。
  • end-user:末端使用者(证书)。图中的末端证书就是*.csdn.net使用的数字证书。

可以看到证书链由多个证书一层一层组成的,其中除了末端证书的公钥是给用户加密报文外,其他层证书中的公钥均用于解密下一层的证书指纹签名。最高层的根证书是自签名的,也就是自己颁发给自己,所以根证书一定是可信的。一般微软等公司会根据一些权威安全机构的评估选取一些信誉很好并且通过一定的安全认证的证书发布机构,把这些证书发布机构的证书默认就安装在操作系统里面了,并且设置为操作系统信任的数字证书。其最终效果就是一条信任链:证书A让证书B证明自己可信,而证书B又找证书C证明自己可信,一直到根证书自己给自己证明身份。在当前图片中的证书路径中,其证书链如下:

不懂数字证书?看这篇文章就行了

根CA:DigiCert Global Root CA 给中间CA:GeoTrust RSA CA 2018 颁发数字证书,GeoTrust RSA CA 2018 给 .csdn.net 颁发数字证书。当客户端(比如浏览器)拿到 .csdn.net 的数字证书时,就会获得数字证书和数字签名,于是沿着证书请求认证,到DigiCert Global Root CA的根证书时,因为根证书可信任,于是使用根证书的公钥解密GeoTrust RSA CA 2018的证书,拿到GeoTrust RSA CA 2018的证书的公钥后,解密 .csdn.net 的证书,最终确保拿到的 .csdn.net 的证书可信,安全使用该证书中的公钥。
HTTPS通信过程

这张图应该清晰看到数字证书在HTTPS请求中的重要地位。后面找时间写一篇HTTPS请求相关的。

不懂数字证书?看这篇文章就行了

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-04-29
本文作者:随风丶逆风
本文来自:“掘金”,了解相关信息可以关注“掘金”