1、https协议是一种非常安全的数据传输协议,它在网络上传输的所有内容都是经过加密的。
2、https协议是结合了非对称加密和对称加密一起工作,从而保证数据传输的安全性的。
3、非对称加密用于确保客户端可以安全地获取到服务器的真实公钥。对称加密用于确保客户端和服务器之间的数据传输不会被任何人监听和解密,因为对称加密使用的密钥只有客户端和服务器这两者知道,其他任何人在不知道密钥的情况下都无法对传输数据进行解密
常规流程
CA--->服务器(包含公钥的加密数据)--->客户端-->使用系统内置CA公钥解密--->解密成功--->得到服务器公钥
使用Charles流程,未信任证书
CA--->服务器(包含服务器公钥的加密数据)----->charles--->使用系统内置CA公钥解密---->得到服务器公钥---->charles对解密出的公钥进行掉包,并使用charles自己的私钥重新加密数据---->客户端--->使用系统内置CA公钥解密---->解密失败
因为经过charles的私钥重新加密的数据,无法被系统内置的ca公钥解密
使用Charles流程,并信任证书
CA--->服务器(包含服务器公钥的加密数据)----->charles--->使用系统内置CA公钥解密---->得到服务器公钥---->charles对解密出的公钥进行掉包,并使用charles自己的私钥重新加密数据---->客户端--->使用用户手动安装的charles证书解密--->解密成功---->得到charles替换后的公钥
以上主要描述了使用charles证书前后的流程
未使用charles证书数据加密流程
客户端随机生成对称加密的秘钥,通过服务器下发的公钥进行加密---->服务端--->服务端通过私钥解密---->得到客户端随机生成的对称加密的秘钥
使用charles证书数据加密流程
客户端随机生成对称加密的秘钥,通过charles下发的公钥进行加密---->charles通过自己的私钥,解密得到客户端生成的秘钥---->charles通过拦截到的服务端公钥,对这串对称加密的秘钥进行重新加密---->服务端--->服务端通过私钥解密---->得到客户端随机生成的对称加密的秘钥
最终客户端、charles、服务器都知道了对称加密的秘钥,所以,也就知道了传输过程中加密的数据了。
总结
- 以上就是为什么Https很安全,但还是可以被charles进行抓包了,其实这都是用户行为,所以并不会存在所谓的安全问题。