证书认证原理
之前有个客户,咨询安信证书的技术客服,说:一个新的网站去买了ca证书,用户通过浏览器去访问,这时候浏览器如何去验证这个证书的正确性,防止被中间人攻击? 是需要到ca网站上去验证吗还是什么?
安信证书为了解决存在相同问题的人疑惑,接下来通过介绍https证书的结构组成和浏览器如何验证证书的合法性,为大家解答这个问题。
证书颁发机构,也就是CA,是不会直接向用户签发证书的,而是多了一层中间证书颁发机构。CA会自己给自己签发一个证书,这个证书叫做根证书或Root CA;然后CA会通过根证书来签发中间证书,授权中间证书颁发机构签发证书的权限;最后中间证书颁发机构通过中间证书向用户签发用户证书。至于为什么需要多这么一层中间证书颁发机构,目的是为了保护根证书,减少根证书被攻击或者说被破解的风险。因为一旦根证书被破解了,根证书所属的CA颁发的所有证书都将失去保护网站的能力,这是一件十分严重的事情。
值得注意的是,中间证书可以不止一个,中间证书层数越多,根证书越安全,但是中间证书越多,证书结构越复杂,越占用通信资源。所以一般情况下,用户收到的证书是三个证书(一个根证书、一个中间证书、一个用户证书)或四个证书(一个根证书、两个中间证书、一个用户证书)。
好了,相关原理解释完,下面开始正式回答题主的问题,我们以一个部署了证书的网站为例,如图所示,我们点开浏览器地址栏的绿色安全锁。
再点开证书信息,在证书路径界面显示的这三个证书就是我们要找的完整证书。从上到下分别是:根证书、中间证书和用户证书。
事实上,我们申请到的证书只是用户证书,中间证书和根证书是很早就被签发,很早就存在的。我们还要再了解一下根证书库这个概念,浏览器为什么信任CA签发的证书呢?
因为CA是可信任的第三方组织,负责证书的生成、签发和作废。为什么CA时可信的呢,因为他们被WebTrust信任。只有通过WebTrust国际安全审计认证的证书颁发机构CA,其签发的证书才会被各大浏览器信任。根证书库包含浏览器信任的证书颁发机构CA的根证书,有的浏览器会自建根证书库,比如Mozilla Firefox,有的浏览器会使用其他浏览器的根证书库。
那么问题来了,谁来验证证书的合法性呢?当然是浏览器啦,那么浏览器是如何验证的呢?
用户证书被中间证书信任,而中间证书被根证书信任,根证书又被浏览器信任,这样一个完整的证书链使得浏览器可以在根证书库内一次检索用户证书、中间证书和根证书,如果能匹配到根证书,那么这一信任链上的所有证书都是合法的。
这里有个题外话,中间证书和根证书统称为证书链,如果我们在部署证书时,仅导入了用户证书,那么PC短访问网站是没有问题的,因为PC浏览器内置绝大部分CA的证书链,会自动补全。如果是移动端访问,如大部分的手机浏览器,那么就会提示不安全,因为大部分的手机浏览器并不会内置证书链,所以无法识别用户证书,也就会把网站标记为不安全。所以切记,部署证书是一定要安装证书链。
这时候又出现了一个新的问题,如果用户证书被吊销,浏览器还会显示安全吗?证书颁发机构有个叫做证书作废列表的东西。证书签发以后,如果出现私钥泄露或丢失、证书所有者信息变更、不再需要继续使用证书等情况,证书颁发机构将会对证书进行作废,并将证书的序列号登记在证书作废列表CRL中。浏览器通过查询证书颁发机构CA最新的CRL,可以确定某个证书是否有效。但是,浏览器并不可能在每个访问者访问每个网站时都向CA查询一次,拿着工作量也太大了啊,带不动,带不动,所以通常浏览器会定期查询CA最新的CRL,这也就会在一定程度上出现,证书被吊销了,浏览器依旧会信任的情况,但是这个是时间不会太久。
如果用户证书没有问题,反而证书颁发机构CA由于安全防护出现问题导致一些机密内容泄露,那么这个CA就不应该被信任,各大浏览器就会将这个CA的根证书从根证书库中删除。这样,改正数签发的所有中间证书和用户证书都将不被信任。
以上就是浏览器如何验证https证书的合法性的大致了解,希望能帮助到你们。欢迎广大用户前来咨询SSL证书相关问题。
声明:本文由“安信证书”原创发布,原文链接:https://www.anxinssl.com/9304.html,内容未经允许不得转载,或转载时需注明出处!
补充:
1.验证证书的真伪
当浏览器拿到一个数字证书,先看发证机关,然后找到相应的发证机关的证书,获得发证机关的公钥
,用此公钥解密被加密的MD5,这样就获得了此证书的MD5值,称它为Hash1。然后浏览器用MD5算法对
此证书重新计算一遍MD5,获得Hash2。然后比较Hash1和Hash2是否相等。如果相等就证明这张证书是
由发证机关颁发的,并且没有被篡改过.
2.验证持有者的真伪
核对持有证书人的身份。这就要依赖证书里面包含的公钥。此公钥是这张证书所有者的公钥(注意,
这里指的是所有者,而不是持有者!),用此公钥加密一段信息发送给证书的持有者,如果持有者能
发送回(可以是被私钥加密,也可以是明文,没有关系)被加密的这段信息的话就证明该持有者拥有
该证书对应的私钥,也就是说,该持有者就是该证书的所有者。
(接收者收到用公钥加密的信息,能用私钥解密发回或用私钥加密后发回)
3.验证证书所有者的姓名
证书中所有者的名字与认证中心(CA)登记的(Common Name)姓名是否一样(对服务器来说,域名是否一致)
转载于:https://blog.51cto.com/gzkhrh/1582292