SSL数字证书之CA根证书、CA中间证书和SSL证书

【前言】

       说一下大背景吧,我们的一个后台服务需要部署在一个没法上外网的环境,但是我们的后台服务需要访问七牛云进行对象存储,于是乎,需要一个代理来完成这个访问,我门采用nginx七层来做这个代理,因为七牛访问是https,那么必然就需要自签证书咯。然后就开始吭哧吭哧造自签证书(具体签发过程请移步这里:基于OpenSSL的CA建立及证书签发)。

       造完根证书以及中间证书后,问题就来了,我在代理和后台服务放置的都是中间证书,于是乎就一直报错无法验证证书。说来真是惭愧,起初我一直自以为是的认为是代码的问题,虽然看后台服务日志确实有个报错,但是在浏览器访问的时候返回的信息是证书验证不通过。我一直和开发同学强调大概率是他们代码错误,最后在他们团队leader耐心的和我一起进行调试后,发现我应该把签发的根证书放到后台服务所在机器,我们的后台服务需要读取(用携带一词或许更合适一点)这个根证书去和代理进行交互。

       总的来说,就是后台服务就好比我们的浏览器,我们通过浏览器去访问某个https的网站,浏览器本身是内置了对应的根证书的,那么你想想,我们的后台服务是不是也应该要内置这些对应的根证书呢?是不是突然就犹如醍醐灌顶,茅塞顿开了。之后我把自签的根证书替换到后台服务后,问题果然得到解决。

       复盘整个过程,仔细回味一下,为什么后台服务需要携带这个根证书去和代理端进行交互验证呢?换句话说,为什么浏览器需要内置根证书去验证要访问的https呢?那么SSL证书是什么?CA中间根证书是什么?CA根证书又是什么东西呢?请听我细细道来.......

【SSL证书】

百度曰:SSL证书是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能的证书

      这些是我个人的相关理解

对HTTPS的思考之HTTPS如何做到数据传输安全的呢?

HTTPS建立连接详细过程

其实我个人感觉人们常常是将SSL证书称之为CA证书,也有称之为server证书的,说到底就是CA中心签发的一个可信的证书。

【CA中间证书是什么】

       中间二字早已表明它的身份,它是介于SSL证书和CA根证书中间的一个东西。试想一下,如果用CA根证书直接签发SSL证书,如果发生了错误,或者说要取消掉root,那么用这个根证书签名的所有证书都将变为不可信。所以,根证书用自己的私钥对中间证书进行签名,这个时候中间证书变为可信证书了。中间根又可以给另一个中间根进行签名,这个被中间根签名的新中间根同样可以用来签署SSL证书。

【CA根证书到底是什么】

百度曰:根证书是未被签名的公钥证书或自签名的证书

       我们来了解下浏览器是如何来信任一个https网站的TLS证书的。首先我们要知道,证书(后文称之为证书A)中的内容有用户的信息、公钥以及CA中心的签名。那么问题来了,我们如何确定这个CA组织的签名是否可信呢?显然需要用到这个CA中心的公钥,那么这个公钥又要从哪里获取呢?当然是从包含有CA中心公钥的那份证书(后文称之为证书B)中获取。下载了证书B后,问题又来了,如何验证证书B又是可信的呢?于是又要用签发证书B的证书C来验证这个证书B是可信的。

这个时候你会发现,这似乎是一个死循环,一层层嵌套,人们还给它取了一个有趣的名字:证书链。或许你会想,都死循环了,那还玩犊子啊。显然不是这样,证书链是有终结的,你想啊,如果我不用别人给我签名的证书,我自己给自己签名,那么是不是就不需要上一层证书的验证呢?对的,这个证书链的顶端就是这么个自己给自己签名的证书,称之为根证书,俗称自签证书。当年拥有了这个根证书(这里我称之为一级证书),就表明你会信任它签发的所有证书(这里我称之为二级证书),当然也会信任被二级证书签发的三级证书、被三级证书签发的四级证书......是不是突然想起一句古文“子又生孙,孙又生子;子又有子,子又有孙”,从这个一层层签发来看,确实是这么回事。

一句话总结,根证书是CA中心给自己签名的证书,是证书链的起点,安装根证书,就是信任此CA中心。

SSL数字证书之CA根证书、CA中间证书和SSL证书_第1张图片

你可能感兴趣的:(计算机网络,安全)