流程图
之前一直对https工作原理比较疑惑,后来网上看到一幅图,个人觉得描绘的很清楚,借用一张图,来源
原理
https可以用来防止中间人攻击,整个流程中包含了两种加密方式,对称加密和非对称加密,client给server传送密钥使用的是非对称加密,即4->5的过程;双方正式传输数据使用的是对称加密,即6以后的过程。这两种加密的结合保证了传输的安全性,那么安全性是如何保证的?
首先了解几个前置条件:
- 非对称加密中,使用公钥加密,私钥解密;私钥签名,公钥验证
- 对称加密中,加解密使用相同密钥
从流程图中反推一下,看是否有漏洞
- 数据通信的安全性:过程6及以后的通信使用对称加密的密钥加密,只要密钥传输给Server的过程中不泄露就是安全的
- 密钥的安全性:传输密钥的过程使用非对称加密,只要公钥在传输给Client的过程中不泄露就是安全的
- 公钥的安全性:公钥跟随数字证书一起下发给Client,只要保证数字证书(图中的公钥证书)的可靠性就是安全的
- 数字证书的可靠性:数字证书是由权威机构CA向网站颁发的,其中包含了网站信息、公钥等,数字证书会经过hash、CA密钥签名后得到数字证书签名,这样网站就拿到了数字证书和证书签名,首次请求时Server会将证书和签名下发给Client,Client使用CA公钥验证签名并和经过hash的证书对比是否一致,如果一致则表示证书可靠
- 客户端是如何拿到CA证书的:浏览器内置了CA机构的根证书,可以拿到他们的公钥
这样整个流程就串起来了,环环相扣
这里也想到一个问题,是否有遇到过网站提示“不受信任的证书”?
是因为给该网站办法证书的机构根证书未在浏览器内置,这样的网站还是小心为好,如果确认可信,可以通过手动添加根证书的方式解决。