Skip to content

证书授权机构CA和数字证书

一、引言

1.1 问题的引入

f564051b22296dc15ed1b85701bf5e9f.jpeg

客户端A、B、C都想要下载服务器S的某个文件,但文件传输过程中会经过许多不可靠的节点,应该如何保证A、B、C的请求不被篡改,且保证A、B、C收到的是没有被篡改的文件呢?

1.2 第一次解决——加密

bce5e0d70d6ca9ddf4f52c39125ee88d.jpeg

服务器S做了一对密钥,私钥自己保留,并把公钥发送给客户端A、客户端B、客户端C保存。

f9c2bf4e8253f8ca3715afe33c069754.jpeg

这样,客户端A可以用公钥对请求进行加密,密文为&A2*XVqzp346(??=;服务器S收到后用私钥解密,明文为“客户端A想要下载资源文件”;中间节点没有私钥,无法解密这个请求,也就无法篡改了。

eea2f4d3743b0ca175b29a64106ee29f.jpeg

此时,服务器S需要把资源文件传给客户端A,需要保证安全性,于是服务器S决定使用“数字签名(Digital Signature)”:将资源文件用Hash函数生成“摘要(Digest)”,然后用私钥对这个摘要加密,生成数字签名。中间节点一旦修改任意的数据,摘要就会发生变化,而新的摘要需要用私钥加密,中间节点无法生成新的摘要,也就无法篡改了。

例如服务器S生成摘要“MD5-1234567”,加密后为数字签名Xzpqp190&)DVsz;将资源文件和数字签名一起发给客户端,客户端收到后用资源文件生成摘要“MD5-1234567”,用公钥解密数字签名,得到服务器S发送的摘要“MD5-1234567”,如果两个摘要一样,则文件确实是服务器S发出的。

1.3 加密存在的问题

5b5b3a7150f04013aa0708578a9a3039.jpeg

不可靠节点U通过某种方式去掉了服务器S的真公钥,并自己生成了一对假公钥,把假公钥发送给客户端A。当服务器S传递文件的时候,不可靠节点U解开资源文件,并加入木马病毒,重新用自己的私钥签名,发送给客户端A。客户端A用U的假公钥解开验证,一切正常,误以为是服务器S传递过来的真文件。

1.4 第二次解决——证书授权中心

b4eecfea19ff1692e20c05219c3e77c4.jpeg

服务器S去一个权威机构“证书授权中心(Certificate Authority)”,将服务器的信息、服务器S的公钥一起用CA私钥加密,生成“数字证书(Digital Certificate)”。

0fa89e9be70959b77a474ca0c8e9bcae.jpeg

服务器S把通过认证的证书发给客户端,客户端用CA公钥解密和验证后得到服务器S公钥,保证服务器S公钥不会被篡改。

二、数字签名 Digital Signature

数字签名(Digital Signature),就是只有信息的发送者才能产生的别人无法伪造的一段数字串。常见的数字签名手段就是Hash算法,如MD5、SHA256,原理也很简单,将数据通过哈希函数映射到一段字符串上,一旦改动了数据,字符串也会变化,不产生变化的概率极低,也就是所谓的“不可抵赖性”。

MD5在我中学时期很火,各大下载站为了保证自己的下载内容没有被注入木马,通常都会在网站上挂着MD5校验值。现在木马已经很少了,而且SHA256更安全用得更多一些。

三、证书授权中心 CA

证书授权中心(Certificate Authority,CA),作为一个受信任的第三方,承担公钥合法性校验的责任。

3.1 证书链 Certificate Chain

CA如果直接颁发数字证书,一旦CA的私钥泄漏,所有的证书都将无效。

c5dcf4e5ab345507152a9ce97ebc6a52.jpeg

因此CA设立了三级证书,分别是根证书(Root Certificates)、中间证书(Intermediates Certificates)、终端用户证书(End-user Certificates)。

  • 根证书的私钥通常存放在断网的环境里,隔离保护;根证书通常除了提供官方下载渠道下载,还会和其他厂商合作,比如Windows操作系统,Chrome浏览器,让其内置这张证书。
  • 中间证书可能会有多级,比如二级中间证书、三级中间证书等。终端用户证书只能由这些二级CA、三级CA颁发,这样一旦某个中间CA的私钥泄漏,根CA重新颁发一张证书即可。中间CA的私钥一旦泄漏,也意味着各大浏览器都会标记这家CA颁发出的终端用户证书不安全,这家公司将会倒闭。
  • 终端用户证书则是我们平时使用到的服务器证书。

剩下的问题就是这么多级证书如何做校验?

34c812ad6669b0f403e64b1853e35bb9.jpeg

根证书-中间证书-终端用户证书形成了证书链(Certificate Chain),当校验的时候,根据颁发机构ID一级一级往上提取证书,然后一级一级根据公钥校验证书合法性。

我们可以看看比较出名的公司使用的什么证书(通过点击浏览器小绿锁就可以看到了):

2b2a1d84cdce6997798cc7bdcd75b10e.png

百度用的Globalsign根CA。

7798c28a2080719cfa5fc0db20cd363e.png

中国建设银行用的DigiCert。

c9aab295ebb7934a69f054c3ac67ade5.png

github用的DigiCert。

87ee87a768eb7a042403beae6e6296ab.png

google用的GlobalSign。

3.2 自建CA问题

如果只是自己使用,当然可以自己搭建CA给自己签发证书,但浏览器一般都会提示“不安全”,因为这个证书不是权威机构颁发的。

四、证书类型

证书一共有三种类型:域名型证书DV(Domain Validation SSL Certificate)、企业组织型证书OV(Organization Validation SSL Certificate)、增强型证书EV(Extended Validation SSL Certificate)。

对比项DVOVEV
审核内容域名域名、组织信息域名、组织信息、第三方数据库
签发周期几分钟~几小时2~5天5~7天
赔付保障一般
浏览器表现绿锁绿锁绿锁+组织信息
证书详情显示域名显示组织名显示组织名
用途个人站点一般企业网站金融等要求较高的企业网站
收费千元级万元级万元级

例如,随便找的一个个人博客的DV证书:

87f9925b4ada5a3e507e05dbc64c6014.jpeg

百度的OV证书:
4b776b9d52925932fb02682e0d591582.jpeg随便找的一个EV证书网站,会在浏览器显示公司信息:

ac36f9694229b65508422002b3f1ee2a.jpeg

参考资料

转载请注明出处https://bananaoven.com/articles/274.html | 香蕉微波炉
分享许可方式知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
重大发现:转载注明原文网址的同学刚买了彩票就中奖,刚写完代码就跑通,刚转身就遇到了真爱。