1、预备知识:
http 的数据传输都是明文,因此它存在数据被监听和篡改的风险,所以http是一种不安全的传输协议。
-
所以需要对数据进行加密,加密方式有对称加密和非对称加密。
对称加密比较简单,就是客户端和服务器共用同一个密钥,该密钥可以用于加密一段内容,同时也可以用于解密这段内容。
非对称加密则要复杂一点,它将密钥分成了两种:公钥和私钥。公钥通常存放在客户端,私钥通常存放在服务器。使用公钥加密的数据只有用私钥才能解密,反过来使用私钥加密的数据也只有用公钥才能解密。
对称加密加解密效率高,但安全性低;非对称加解密效率低,但安全性高。
2、推理逻辑:
问题:http 因为是明文传输,有被监听和篡改的风险,这是不安全的传输协议。所以只要使用 https 就可以解决这个问题,那https是如何保证安全的?
解决:首先就是不能再明文传输了,网站和浏览器之间可以使用公钥来对数据进行加解密(对称加密),这样数据传输就不怕被监听了。
又出现问题:但是浏览器和网站怎么协商公钥呢?如果协商公钥过程被监听,那就与明文无异了。
解决:所以我们还需要用到非对称加密,来协助解决无法安全协商密钥的问题。首先浏览器生成密钥A,并使用公钥对其加密,然后网站使用私钥解密获得密钥A。这样既可以协商密钥,又不怕被监听了,因为密文需要私钥才可以解密。
另外这样只需要在首次商定密钥时用到非对称协商,一旦网站收到了浏览器随机生成的密钥,后续就可以只用对称加密来进行通信了,因此工作效率很高。
又又出现问题:浏览器怎么才能获得网站的公钥?显然浏览器无法将世界上所有网站的公钥预存在操作系统中,而直接去网上获取的话又会出现被篡改的情况,这就陷入了死循环。
解决: CA机构可以帮助浏览器安全的获得网站的公钥。
首先网站将自己的公钥提交给CA机构,CA机构会根据网站提交的公钥、域名和过期时间等信息生成一个证书,然后CA机构用自己的私钥对证书进行加密返回给网站,网站就将这段被加密的数据保存下来。
当浏览器请求网站时,网站就会将这段被加密的数据发送给浏览器,浏览器就可以通过CA机构的公钥(操作系统预存,CA机构就那么几家)对数据解密,然后安全的获得服务器的公钥。
CA机构制作证书包含域名和其他辅助校验数据的原因:如果网站返回给浏览器的加密证书被黑客篡改为他自己去CA机构申请的证书,那么浏览器也能成功解密这段数据,因为黑客的证书也是正规CA机构制作的。
也正是整个原因,所有的CA机构制作网站证书时除了网站的公钥,还有包含其他数据用于校验,比如域名就是很重要的数据。
因为解密出的域名对不上,浏览器就会显示异常界面,黑客就无功而返了。
那么这就是https为什么被称为是安全的传输协议的原因了。
3、流程总结:
网站将自己的公钥提交给CA机构,CA机构会根据网站的公钥和网站域名、有效时长等其他信息来制作证书。在证书制作完成后,CA机构会使用自己的私钥对其加密,然后将加密后的数据返回给网站。
当浏览器第一次请求网站时,网站会将上面那段加密后的证书返回给浏览器,然后CA机构使用自己的公钥对加密证书进行解密,就可以获得网站的公钥了。
然后浏览器随机生成密钥A,并使用网站的公钥对其加密传输给网站。
网站收到密文后,使用网站的私钥对其解密然后获得密钥A。
最后,后续数据的收发都只需要使用密钥A对其加解密即可。
参考文章:写一篇最好懂的HTTPS讲解(郭霖)