采用PROXY代理方式通讯时,都是客户只TCP/IP连接到代理,客户只和代理通讯。 代理和目标进行TCP/IP通讯,代理需要先有PROXY信息,才能知道目标服务器的地址。
HTTP代理最简单!因为HTTP是不加密的,TCPIP连接成功后,第一个包就是HTTP头包,HTTP头里可以表达目标服务器地址和PROXY信息,代理可以根据这个信息去连接目标,所以只要HTTP头里做一点点修改,其它都是一样的,直接盲转发就行了!
HTTPS代理,因为HTTPS正常通讯是加密的,TCPIP连接成功后,马上进行SSL加密握手,第一个包就是SSL握手包,里面没有包含目标服务器地址,故一开始代理无法知道目标服务器地址。所以在HTTPS代理时,需要TCPIP连接成功后,客户先用CONNECT包把目标服务器地址发给代理,代理连接到目标后,再进行后续的盲转发就行了! 即客户先要和代理交流一下PROXY信息,再进行盲转发。
SOCKS代理,同理,一开始代理不知道目标服务器地址,需要客户先用CONNECT包把目标服务器地址发给代理,代理连接到目标后,再盲转发就行了! 即客户先要和代理交流一下PROXY信息,再进行盲转发。
charles代理软件,可以进行HTTPS盲转发,也可以进行HTTPS内容抓包(即SSL proxy)。
HTTPS盲转发,内容是SSL加密的,代理是不知道通讯内容的。
如果要HTTPS解析通讯内容,则代理要冒充“目标服务器”。 代理和目标服务器进行SSL握手,代理把自己的证书发给服务器。 同时代理要冒充“目标服务器”,和客户进行SSL握手,会把“冒充的目标服务器证书”发给客户(所以代理要生成一个冒充的目标服务器证书)。 客户需要有根证书来认证这个“冒充的目标服务器证书”,故手机或电脑需要安装代理的根证书。 即代理相当于是服务器的冒充,采用代理的证书!