首选需要了解连接https请求的过程: HTTPS 请求过程详解
首选确认一个问题,现在随便一个抓包工具都能抓 https 的包,都能看到里面加密的请求参数和响应参数,https 还安全吗?
答:安全
上面蓝色连接讲解了https 的请求过程,可以知道证书里面有一些信息可以在浏览器端离线的验证证书是否安全。并且通过非对称里面的商定了后面对称加密使用的密钥。这个密钥只要不会别的人获取,那么https就是安全的。
https抓包的过程和原理
http是抓包通常使用在中间有一层代理。代理位于客户端和服务器端中间,代理有自己的证书(通常来说代理的证书不能通过CA认证,证书是和IP或者域名绑定的,由CA机构下发的),欺上瞒下。并且做数据报包内容的替换。
1 客户端通过 通过代理连接到网络。
2 客户端请求服务器证书(因为连接的代理网络,所以客户端的请求被代理拿到了)
3 代理截获客户端请求,然后想服务器端请求证书
4 服务端接受到代理发过来的获取证书的请求,然后返回代理证书(服务器端认为是代理在请求数据,它完全不知道真是发起请求的是客户端)
5 代理拿到服务端的证书,然后返回客户端代理自己的证书
6 客户端获得代理返回的证书,开始验证证书是否合法(这时候一般就不合法了,提示证书不安全,可以通过在客户端导入代理证书位为信赖证书的方式来使代理证书合法),然后用代理证书里面的公钥加密自己生成的随机密钥,并且把加密后额数据发送给代理
7 代理用自己的证书私钥解密拿到客户端随机密钥,待会和客户端通讯就用这个客户端随机密钥,然后代理生成一个自己的代理随机密钥,并且用第5步获取到的服务器端证书里面的公钥加密代理密钥,并且发送给服务器端。
8 服务器端收加密后的代理密钥,用服务器端私钥解密,得到代理密钥。然后回复代理,收到,后面服务器端和代理就通过这个代理密钥对称加密的方式通信。
9 代理和服务器端商量 好了密钥,也回复客户端,然后代理和客户端通过客户端密钥对称加密的方式通信。
10 这时候 代理分别持有 客户端密钥,自己和服务端通信的密钥,这时候代理就可以做一个中间商,获取到所有的请求和响应数据。
出现上面的的情况有几个大前提
1 客户端需要连接代理,使用代理上网(所以外面的免费WiFi能随便连吗?你以为你连得只是WiFi,却不知道别的路由器可能是通过代理上网的)
2 即便你连接了代理,代理的证书一般都通不过认证(为啥通不过认证开头蓝色连接里面有说证书认证的过程),只有你添加了代理证书才能正常上网。所以软件别乱装,root权限别乱给,可能不小心别人就把代理证书加入到你的手机里面去了
只要不乱用不明网络,不乱在手机装东西,https 就是安全的。
另外说一句为啥代理必须要向客户端下发自己的证书,而不是下发服务器端证书,如果下发的是服务器端证书,那么这个代理就正常代理,是个好代理,好代理是看不到数据的。在客户端获取到服务端证书,生成客户端密钥,然后用服务器端公钥加密了密钥,上送给服务服务器端,这时候代理是没法解密这份数获取到密钥的,只有服务器端的私钥才能解密这份数据。同样服务端用解密后的密钥加密别的数据,还有后续客户端用密钥加密的上送数据,代理因为没有密钥也是解不开的。
备注:当我说客户端密钥,代理密钥的时候,指的是后面传输数据咏鹅对称加密密钥。要课公钥区分开来,上面的说到两种公钥其一是服务器公钥,其二是代理公钥,试试工程中 证书认证的过程中还用到了(CA机构的公钥)。
http 抓包工具推荐
1 postman(程序员必备)
2 Fidder(老牌的抓包工具)
3 jmeter(压测软件)