今天的疑问主要是, 既然抓包能抓到https通讯的明文,那么使用https还有什么意义呢?
https是用来验证身份的,不是为了信息保密的(ps:如果用双向https验证,那么应该能保证加密+身份)
server下发的公钥是放在证书里面的.
在浏览器侧, 系统的内置的根证书会验证server下发的公钥证书(权威机构颁发的证书)的真实和有效性, 在手机native网络框架侧,也支持对公钥证书的信任是否允许通过提供了api,默认开关是与浏览器的验证相同,只支持到权威机构认证的证书(因为系统内置);
我们之所以能抓包解密https数据,是因为抓包之前,需要在手机或者电脑上安装一个 Charles 提供的根证书,这个根证书加入到手机的 Trust Store, 之后它所签发的证书都会被系统认作可信
以上过程是得到公钥;
公钥和私钥-》生成客户端和服务端都知道的一个对称密钥(而且每次握手,对称密钥应该都会变)
真正的https过程会用到3个随机数
(1)生成对话密钥一共需要三个随机数。
(2)握手之后的对话使用"对话密钥"加密(对称加密),服务器的公钥和私钥只用于加密和解密"对话密钥"(非对称加密),无其他作用。
(3)服务器公钥放在服务器的数字证书之中。
但是我们网络开发可以这么做
1、生成一个16为随机数 key
2、用公钥加密这个16为随机数 encKey
3、用key aes算法对称加密content,encContent
4、传递encKey 和 encContent
5、server使用私钥解密encKey得到key
6、server使用key解密encContent,得到content
参考几个文章:
HTTPS连接过程以及中间人攻击劫持
从对称加密到非对称加密再到认证中心 -- https 的证书申请
HTTPS 证书认证原理分析