X509证书从理论到实践之数字证书

上一篇文章我们介绍了非对称密钥系统以及数字签名,通过漏洞及解决方案的形式向大家展示了非对称密钥和数字签名所解决的问题。

这篇文章我们继续使用该种形式向大家介绍数字证书系统。

通过上一篇文章,我们知道非对称密钥通过使用公钥加密私钥解密从而解决了明文的加密传输问题,然后使用私钥加密公钥解密来解决消息内容被篡改问题。问题解决的关键是公钥私钥分开,攻击者无法获取不在网络上传输的私钥,所以攻击者无法解开公钥加密过的内容,也无法伪造用私钥签过名的内容。但是我们通过仔细思考,这套系统十分依赖公钥和私钥的配对性,攻击者有没有可能替换公钥来达到攻击的目的?下面我们来逐一分析

数字证书认证私钥

非对称密钥加密的漏洞

非对称密钥加密的漏洞

通过上图我们可以看到,攻击者不需要知道Alice的私钥,但是只要他能够伪造Alice的公钥,然后发给Bob,Bob无法验证公钥是否真正属于Alice,这样Bob使用伪造的Alice公钥对明文进行加密发送给Alice,这时候攻击者只要拦截了消息就可以使用自己配对的私钥对密文进行解密了。

数字证书解决伪造公钥漏洞

既然出现了漏洞我们就需要解决问题,通过图我们很明显发现关键在于攻击伪造了Alice的公钥,如果有一种机制能够让Bob验证一下Alice的公钥是不是真的,这个漏洞就可以修补了。所以我们看下面一张图:

非对称密钥和数字证书

这张图有点复杂,不过只是增加了一个角色(Certificate Authority)也就是我们常说的CA,该机构就是来提供一种方式来让Bob验证所声明的Alice的公钥是不是真正的Alice的公钥。这种方式就是数字证书。所谓数字是和物理证书相对应,该证书使用电子媒介存储,用来认证某个资源确实属于某个实体,其中资源和实体都具有唯一性。

下面简要描述一下该图所表达的意义。

Alice在发布或者发送自己的公钥给Bob时,先向 CA请求对自己的公钥进行认证,这时候Alice需要提供自己的公钥,同时提供自己的个人信息,这个信息需要全局唯一,一般会用个人域名来唯一标识。CA收到证书后需要对信息进行验证,主要是看该信息是否已经被认证,或者该信息确实属于Alice(比如Alice用谷歌域名去CA认证肯定是不可以的)。信息如果没有问题就可以向Alice颁发证书,并且保证不再向该唯一信息颁发其他证书。这个证书颁发的过程其实就是CA使用自己绝密的私钥对Alice的公钥和信息进行加密。这时候Alice可以放心把公钥发送给Bob。Bob收到Alice的公钥,首先向CA请求CA的公钥,然后Bob使用CA的公钥对证书进行解密,然后查看是否符合Alice的信息,比如域名是否正确,如果正确则Bob认为该Alice的公钥是真实的。这时候如果有攻击者伪造Alice的证书,由于没有CA的私钥,无法生成合法证书,所以Bob可以使用CA的公钥将其检测出来。

当然这里大家会说,攻击者会不会继续伪造CA的公钥?这一点我们下一篇PKI系统会细讲,这里确实有这个风险,但是现在CA的数目并不多,所以相对来说不容易被伪造,而且通过证书链,只有根证书存在被伪造的风险。

PKI 体系结构

关于 PKI 体系结构我们可以参考这篇文章,这里简明扼要的介绍一下对于开发,我们需要知道的 PKI 的内容。

PKI 是 Public key infrastructure 的缩写,也即是公钥基础设施。顾名思义,也就是用于管理公钥的基础设施。前面我们已经知道,对于公钥的真实性是非常重要的,所以我们需要专门的机构来认证这些公钥,也就是我们前面提到的数字证书,认证机构通过分级构成认证链,从而组成一个严密的安全的公钥认证机制,来保障我们的网站,传输等所使用的公钥是真实合法的。