https之证书验证

1.中间人攻击

对于http协议,中间人攻击(man in the middle)是一种著名的攻击方式。
https之证书验证_第1张图片
图中John和Mary作为通信的双方,Frank为攻击者
1. John向Mary发送一段数据
2. Frank截获了John的包,窃取/修改数据后,伪装成John继续将包转发给Mary
3. Mary不知道Frank的存在,认为只是收到了来自John的数据,因为返回一段数据给John
4. Frank截获这段返回数据的包,窃取/修改数据后,发送给John

这样,Frank就成功窃取了John和Mary的通信数据,并且John和Mary都不知道Frank的存在。

2.SSL证书

从中间人攻击的方式可以看出,Frank攻击得以成功的关键是John和Mary没有一种既唯一标识自己,同时又能不被他人伪装的方式。SSL证书就是为了解决这个问题。
https之证书验证_第2张图片
对于每一个使用https协议的网站,可以看到该网站的证书信息,图中是google使用的证书信息。

2.1证书链

证书以证书链的形式存在
1. 最上层为root,也就是通常所说的CA,用来颁发证书
2. 最下层为end-user,对应每个网站购买使用的证书
3. 中间一层为intermediates,是二级CA,这一层可以继续划分为多层,用来帮助root给end-user颁发证书,这样root只需向intermediates颁发证书

只有当整个证书链上的证书都有效时,才会认定当前证书合法

2.2证书信息

对于每个证书,会有一对公钥&私钥,公钥加密的数据只有私钥可以解密,私钥加密的数据只有公钥可以解密。私钥由证书所有者保留并且严格保密,公钥则公开使用。
此外,每个证书中还会包含很多信息,比如颁发机构,有效期等,其中最为重要的一个是签名
签名是指利用上一层证书的私钥,加密一些元信息(证书所有者的信息,包括基本信息,公钥,证书生效域名等)。这样,当收到签名证书时,只需要根据CA提供的公钥对签名解密,验证元信息是否一致,就可以判断当前证书是否合法。一句话来说就是,每个证书会对下一层的证书合法性做担保
https之证书验证_第3张图片

3.根证书的合法性

既然每个证书会对下一层的证书合法性做担保,那么确保根证书的合法性就至关重要。
根证书是一种自签名证书。在浏览器或者操作系统中,会预安装一些证书,这些证书就是根证书,对于这些证书,在证书验证的过程中会直接选择相信。因此不要轻易安装其他网站的证书。

你可能感兴趣的:(Web)