文章目录

一、引言

1.1 问题的引入

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

1.2 第一次解决——加密

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

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

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

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

1.3 加密存在的问题

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

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

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

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

二、数字签名 Digital Signature

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

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

三、证书授权中心 CA

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

3.1 证书链 Certificate Chain

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

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

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

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

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

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

百度用的Globalsign根CA。

中国建设银行用的DigiCert。

github用的DigiCert。

google用的GlobalSign。

3.2 自建CA问题

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

四、证书类型

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

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

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

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

参考资料

1、《【web安全】X.509数字证书的结构与解析》

2、《证书链-Digital Certificates》

3、《What is the SSL Certificate Chain?》

4、《域名型(DV),企业型(OV),增强型(EV)三种SSL证书之间的区别》

5、《DV型和OV型证书的区别》


转载请注明出处http://www.bewindoweb.com/274.html | 三颗豆子
分享许可方式知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
重大发现:转载注明原文网址的同学刚买了彩票就中奖,刚写完代码就跑通,刚转身就遇到了真爱。
你可能还会喜欢
具体问题具体杠