HTTPS疑惑
疑惑一:HTTPS 什么方式加密
答:常用的加密算法有对称加密算法和非对称加密算法(公开密钥算法),我们知道对称加密算法具有稳定和速度快的特点,难点是如何可靠的传输加解密的密钥,而公开密钥算法通过密钥对,有效的解决了密钥传输的难题。 所以实践中,通过结合对称加密和非对称加密两种算法来解决数据传输的安全问题,简单的说,浏览器在和服务器协商阶段,确定加密算法,然后生成一个随机的对称加密密钥,用证书的公钥加密, 然后发送给服务器,只有服务器拥有私钥可以解密,服务器解密拿到对称加密的密钥后,后续的内容传输就用这个对称加密密钥来加解密。
疑惑二:为什么不直接用公钥和私钥对传输的内容加解密,不行吗?
答:不行的,先不说RSA加解密比较慢,最主要还是因为公钥是公开的,任何人都可以拿到公钥, 浏览器用公钥加密后传给服务器,这个过程确实是安全的,因为只有服务器有私钥,但服务器发送给浏览器的内容用私钥加密,任何人只要拦截内容,然后用公钥就可以解密,那么服务端发送给浏览器的内容都是不安全的。
疑惑3:client的公钥从何而来?
答:端上不可能把全世界所有的网站的公钥预先内置到发行包,故client的公钥来自服务器。公钥并不是直接下发给client(这个公钥储存在数字证书中,https建立链接时,服务器先将数字证书发送给client)
疑惑3:公钥为什么通过证书的形式下发?
答:公钥是由服务器推送给浏览器,那么浏览器怎么能确认这个公钥是服务器拥有的合法公钥呢,万一中间人攻击把公钥给换了呢,所以直接下发裸的公钥是非常危险的。我们必须保证这个公钥服务器的,未被中间人替换或修改。因此给服务器公钥开个证明很要必要,为了给服务器的公钥开个证明,我们需要一个权威的机构来颁发这个证明,CA(Certificate Authority - 数字证书认证中心)就是专门负责给公钥开证明的机构,所颁发的证明称为证书。 颁发证书是HTTPS安全极其重要的一环(也是最为脆弱的一环),所以颁发证书的CA机构必须绝对的可信,绝对的公平。
参考文献:https://zhuanlan.zhihu.com/p/100389013