http:明文传输,在传输过程中,不会验证通信方的身份,不会验证报文的完整性,任何人都有可能从中截获、修改或者伪造请求发送
https
最终的通信模式:对称加密通信
HTTPS 的出发点是解决HTTP明文传输时信息被篡改和监听的问题。
防止被篡改:表现1:监听者直接修改密文,浏览器解密不成功,终止访问;表现2:获取CA证书阶段,监听者发送自己的证书(危险证书)返回浏览器,但证书里的域名不是浏览器访问的域名,终止访问
防止被监听:得到的密文,监听者解不开。
HTTPS 协议提供了三个关键的指标 加密、数据一致性、身份认证
PS:对称加密,就是客户端和服务器共用同一个密钥
非对称加密:公钥和私钥。
在浏览器和网站首次商定密钥的时候需要使用非对称加密,通信成功后会采用对称加密,通信效率更高。
为什么首次商定密钥要用非对称加密?因为对称加密是共用同一个密钥,大家双方都不认识对方,一开始肯定没共同的秘钥,而网站有公钥所以用用非对称加密
以前是这样得到公钥的(获取公钥方式A)
流程A
浏览器随机生成秘钥A,并用得到的公钥加密,把数据传回给网站,网站用私密解密得到秘钥A,后续就用这个秘钥A来对称加密的方式通信,执行流程B
流程B
综上是不是很完美,然而获取公钥方式A是有缺陷的
通信期间公钥可能被篡改。
所以CA就出现了, 所有主流CA机构的公钥内置到操作系统,每个网站都会向CA机构申请签发数字证书,网站的公钥也会放到CA里, 证书制作完成后,CA 机构会使用自己的私钥对其加密,并将加密后的数据返回给网站。
浏览器请求网站时,网站返回CA通过私钥加密的数据(证书)(疑惑:窃听者不也可以用本地CA公钥解密数据?),浏览器便用本地CA公钥来解密数据,得到网站的公钥,再执行流程A
这个回答了刚刚的疑惑, 解密出来的证书中包含域名信息,如果和浏览器正在请求的域名对不上,则终止请求。
总结HTTPS通信流程:浏览器访问网站时,网站会返回自己网站的CA数字证书,浏览器用本地的公钥(主流CA机构的公钥内置到操作系统)解密数字证书得到网站的公钥,浏览器随机生成秘钥A,通过网站公钥加密,再传回给网站,网站用私钥解密得到秘钥A,后续的通信就用秘钥A来进行加解密,也就是先非对称加密,后对称加密。
referrence:juejin.cn/post/692529…