浏览器是如何验证SSL证书的合法性?
发布日期:2020-04-17现在SSL证书使用越来越广,安装完SSL证书的网站,在浏览器都是可以直接查看到的,点击浏览器地址栏的绿色小锁,就可以看到关于该网站的SSL证书的相关信息。那这些浏览器具体是如何验证SSL证书的呢?
浏览器需要验证SSL证书的5个方面:
第一,验证浏览器中“受信任的根证书颁发机构”是否存在颁发该SSL证书的机构。
第二,检查证书有没有被证书颁发机构吊销。
第三,验证该网站的SSL证书是否过期。
第四,审核该SSL证书的网站的域名是否与证书中的域名一致。
第五,该网站有没有被列入欺诈网站黑名单。
在经过上述5个方面确认后,才能安全显示该网站,所以部署一个SSL证书对网站安全还是很有必要的!
证书颁发机构,也就是CA,是不会直接向用户签发证书的,而是多了一层中间证书颁发机构。CA会自己给自己签发一个证书,这个证书叫做根证书或Root CA;然后CA会通过根证书来签发中间证书,授权中间证书颁发机构签发证书的权限;最后中间证书颁发机构通过中间证书向用户签发用户证书。至于为什么需要多这么一层中间证书颁发机构,目的是为了保护根证书,减少根证书被攻击或者说被破解的风险。因为一旦根证书被破解了,根证书所属的CA颁发的所有证书都将失去保护网站的能力,这是一件十分严重的事情。
值得注意的是,中间证书可以不止一个,中间证书层数越多,根证书越安全,但是中间证书越多,证书结构越复杂,越占用通信资源。所以一般情况下,用户收到的证书是三个证书(一个根证书、一个中间证书、一个用户证书)或四个证书(一个根证书、两个中间证书、一个用户证书)。
我们以一个部署了SSL证书的网站为例,如图所示,我们点开浏览器地址栏的绿色安全锁,再点开证书信息,在证书路径界面显示的这三个证书就是我们要找的完整证书。从上到下分别是:根证书、中间证书和用户证书。
事实上,我们申请到的证书只是用户证书,中间证书和根证书是很早就被签发,很早就存在的。我们还要再了解一下根证书库这个概念,浏览器为什么信任CA签发的证书呢?因为CA是可信任的第三方组织,负责证书的生成、签发和作废。为什么CA时可信的呢,因为他们被WebTrust信任。只有通过WebTrust国际安全审计认证的证书颁发机构CA,其签发的证书才会被各大浏览器信任。根证书库包含浏览器信任的证书颁发机构CA的根证书,有的浏览器会自建根证书库,比如Mozilla Firefox,有的浏览器会使用其他浏览器的根证书库。
那么问题来了,谁来验证SSL证书的合法性呢?当然是浏览器啦,那么浏览器是如何验证的呢?用户证书被中间证书信任,而中间证书被根证书信任,根证书又被浏览器信任,这样一个完整的证书链使得浏览器可以在根证书库内一次检索用户证书、中间证书和根证书,如果能匹配到根证书,那么这一信任链上的所有证书都是合法的。
中间证书和根证书统称为证书链,如果我们在部署证书时,仅导入了用户证书,那么PC短访问网站是没有问题的,因为PC浏览器内置绝大部分CA的证书链,会自动补全。如果是移动端访问,如大部分的手机浏览器,那么就会提示不安全,因为大部分的手机浏览器并不会内置证书链,所以无法识别用户证书,也就会把网站标记为不安全。所以切记,部署证书是一定要安装证书链。
这时候又出现了一个新的问题,如果用户证书被吊销,浏览器还会显示安全吗?证书颁发机构有个叫做证书作废列表的东西。证书签发以后,如果出现私钥泄露或丢失、证书所有者信息变更、不再需要继续使用证书等情况,SSL证书颁发机构将会对证书进行作废,并将证书的序列号登记在证书作废列表CRL中。浏览器通过查询证书颁发机构CA最新的CRL,可以确定某个证书是否有效。但是,浏览器并不可能在每个访问者访问每个网站时都向CA查询一次,所以通常浏览器会定期查询CA最新的CRL,这也就会在一定程度上出现,证书被吊销了,浏览器依旧会信任的情况,但是这个是时间不会太久。