http,https,socks4,socks5,ftp,gopher这些代理验证的区别??
最一般的方法,用网吧模式登陆或者点QQ里的个人设置---安全里有设置代理服务器.这样就不用担心别人看到你的IP了。在通讯模式中 改为服务器模式 就可以了
以下是具体方法:
首先说说隐藏真实IP的方法,最简单的方法就是使用代理服务器。与直接连接到Internet相比,使用代理服务器能保护上网用户的IP地址,从而保障上网安全。代理服务器的原理是在客户机和远程服务器之间架设一个“中转站”,当客户机向远程服务器提出服务要求后,代理服务器首先截取用户的请求,然后代理服务器将服务请求转交远程服务器,从而实现客户机和远程服务器之间的联系。很显然,使用代理服务器后远端服务器包括其它用户只能探测到代理服务器的IP地址而不是用户的IP地址,这就实现了隐藏用户IP地址的目的,保障了用户上网安全。而且,这样还有一个好处,那就是如果有许多用户共用一个代理器时,当有人访问过某一站点后,所访问的内容便会保存在代理服务器的硬盘上,如果再有人访问该站点,这些内容便会直接从代理服务器中获取,而不必再次连接远端服务器,因此可以节约带宽,提高访问速度。
建议您最好用免费代理服务器,寻找免费代理服务器的方法有很多,你可以试试用ProxyHunter(代理猎手),它能自动为您搜索出多个免费代理服务器,并验证各个服务器的连接速度,从而让你选择最佳途径。更重要的是,代理服务器不仅支持浏览软件,而且支持电子邮件、FTP、下载、离线浏览等功能软件,可谓无所不在。点击下载代理猎手 31。不过这种方法比较费时、费事,建议不到万不得以时还是不用为好。最好的方法是使用现成的免费代理服务器,现在网上有不少网站定期提供最新的免费代理服务器,如这里提供的代理服务器的更新速度就非常快,而且各种类型的代理都有:http://wwwemaganet/8341/myann/indexasp 。建议大家把这个网页放入你的收藏夹,这样你就再也不用为找不到好的免费代理服务器而发愁了。
找到免费代理服务器后,就可以使用它了。以IE浏览器为例,运行IE,点击“工具”→“Interner选项”,在弹出的“Interner选项”对话框中选择“连接”标签,再点击“设置”按钮,在弹出的对话框中把“对此连接使用代理服务器”前面的框勾选上,然后在“地址”和“端口”栏中填入你找到的代理服务器IP和所用端口即可(图1)。
同时在“高级”设置中你还可以对不同的服务器,例如HTTP、FTP设定不同的代理服务器地址和端口。这样一来,当你再访问那些网页时,页面上显示的就不再是你的真实IP了。
不过,并不是所有的代理都不将你的真正的IP向目标地址上发送,假如你使用A4proxy之类的程序检测一些代理,发现http-ip-forward是存在的话,那证明该代理会把你的真正IP向目标地址发去,如果在一些聊天室中使用,会被高级别的人看到真正的IP。
另外,在代理中有HTTP和SOCKS代理之分,在SOCKS代理中又有SOCKS4和SOCKS5代理之分,SOCKS4和SOCKS5不同之处在于SOCKS5支持UDP这种协议,但SOCKS4是不支持的,所以在QQ上不可以使用SOCKS4代理,因为QQ使用的是UDP协议,但在ICQ上就可以使用SOCKS4或SOCKS5代理。
隐藏IP的另外一个方法是利用受控于你的电脑上的木马(也就是利用肉鸡),该电脑可以自由访问网络且不限于和你在一起(比方说单位或学校的电脑)。一些国外的木马如Sub7,具有“端口转向”功能,假设你想看xxxcom 这个网站的内容,而这个网站会记录访问者的IP,那么你可以这样做:假设受控电脑上有木马Sub7服务端程序在运行,请在自己的电脑上运行Sub7客户端,连接上那台电脑,使用端口转向的功能,在那台电脑上打开一个90端口,设定凡是从这个端口进去的数据都会转向到xxxcom 这个网站的80端口去(80端口是默认的www服务端口)。假设那个感染了Sub7的电脑的IP是202202202202,那么只要在浏览器上输入http://202202202202:90 ,就可以看到 xxxcom 这个网站的内容的了,而且那个网站记录下的访问的IP是202202202202,不是我们真正的IP,这样就安全多了。
好了,现在你已经可以小小地“隐身”一把了,但还不够彻底,要想“隐形”还必须隐藏隐藏计算机名和工作组。因为网上有许多黑客软件可以查出你的计算机名和工作组,他们主要是通过搜索网上是否存在使用NetBIOS协议的用户,来探测其机器名称、IP地址等等信息,并借此来攻击你。
在Internet上,NetBIOS开放就和一个后门程序差不多。因为在你安装TCP/IP协议时,NetBIOS也被Windows作为默认设置载入了你的电脑,而电脑随即也具有了NetBIOS本身的开放性。换句话讲,在不知不觉间,你的上网电脑已被打开了一个危险的“后门”。这个后门可以泄漏你的信息:你的计算机名和工作组。事实上,有许多人会用自己的真实姓名做计算机名称,还有自己的单位名字作为工作组,这样很容易根据某个人的固定信息找到某个人的IP地址。而网上针对IP地址的攻击手段和工具实在是太多了,您说这是不是很危险呢?因此,如果你是一个单机用户那么完全可以禁止NetBIOS服务,从而睹上这个危险的“漏洞”。下面是解决办法:
1Win9x用户
在Win9x下如果你是个拨号上网用户,就完全不需要登录到NT局域网络环境,只需要在“控制面板”→“网络”,删除“Microsoft网络用户”,使用“Microsoft友好登录”,另外也不要去设置“文件打印共享”就可以了。
2WinNT用户
在WinNT下你可以取消NetBIOS与TCP/IP协议的绑定,方法是:“控制面板”→“网络”→“NetBIOS接口”→“WINS客户(TCP/IP)”,选择“禁用”,确定后重启。
3Win2000或者WinXP用户
先用鼠标右键单击“网络邻居”,选择“属性”,进入“网络和拨号连接”,再用鼠标右键单击“本地连接”,选择“属性”,进入“本地连接属性”。双击“Internet 协议(TCP/IP)”后,点击“高级”,选择“选项”条中的“TCP/IP 筛选”,在“只允许”中填入除了139之外要用到的端口。注:如果你在局域网中,这样会影响局域网的使用。
下面再介绍一个对Win9x/NT/2000/XP用户都有效地办法:自己定制防火墙规则。以天网个人防火墙为例,选择一条空规则,规定如下规则:“数据包方向”选“接收”,“对方IP地址”选“任何”,“协议”选“TCP”,“本地端口”选“139到139”,“对方端口”选“0到0”,在“标志位”中选上“SYN标志”,“动作”选“拦截”,然后保存即可。(图2)
最后,我们再说说如何在QQ中隐形。之所以单独谈QQ,是由于QQ已经成为绝大多数网民上网的必备工具了。
QQ采用的是UDP数据包通讯,攻击者只要向你发送一个信息,他就可以通过监视UDP数据包来获得你的IP和QQ的端口号。从理论上说,在直接通讯的模式下,想避免攻击者发现你的IP地址是十分困难的。所以这里笔者介绍一种很常见的方法来避开对方知道你的QQ地址——使用代理服务器。通过代理服务器上QQ,就可以隐藏自己的真实IP,而攻击者所看到的IP只是代理服务的地址。隐身登录QQ后发送的消息是通过腾讯的服务器中转的,这样攻击者获取的IP也只是腾讯服务器的地址。
以最新的QQ2004为例,只要右键单击屏幕右下角的QQ图标,在弹出菜单中选择“系统参数”,单击“系统设置”中的“代理设置”,选中“使用自定义的网络设置”。在“类型”中选择“SOCK5代理服务器”在“服务器”和“端口”一栏中输入你寻找到的免费代理地址(图3)。
“用户名”和“密码”一般不用填,点击“测试”按钮,如果你填入的代理地址有效,则会弹出“代理服务器工作正常”提示框,否则就会弹出“无法连接到代理服务器”的提示。上述步骤做完之后,最后点击“确定”即可。提供免费代理服务器的网站有很多,也可以自己用代理猎手等工具来查找。
如果没有找到合适的Sock5代理,还可以使用支持HTTP协议的QQ服务,实现QQ连通。有了这个功能,非会员也能够通过HTTP代理上线了。要想使用TCP方式登陆,只要在图四所示图中在“类型”中选择“HTTP代理服务器”。(图4)
然后输入服务器地址和端口(一般填80),这样,非会员也可通过HTTP代理上线了。之后你就可以通过HTTP代理使用QQ了,而网友们看到的则是你的假IP,这样就安全多了!
参考文献:http://dbkingsoftcom/c/2004/11/29/154980shtml
参考文献:http://iasksinacomcn/q/30/99/57/2579930shtml
一、什么是代理服务器?
代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。
在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,需送出Request信号来得到回答,然后对方再把信息以bit方式传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求, Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。而且,大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。
更重要的是:Proxy Server (代理服务器)是 Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联 (OSI) 模型的对话层。
二、代理服务器的分类
1、HTTP代理按匿名功能分类。
是否具有隐藏IP的功能。
非匿名代理:不具有匿名功能。
匿名代理。使用此种代理时,虽然被访问的网站不能知道你的IP地址,但仍然可以知道你在使用代理,有些侦测IP的网页也仍然可以查到你的IP。
高度匿名代理:使用此种代理时,被访问的网站不知道你的IP地址,也不知道你在使用代理进行访问。此种代理的隐藏IP地址的功能最强。
2、按请求信息的安全性分类
全匿名代理:不改变你的request fields(报文),使服务器端看来就像有个真正的客户浏览器在访问它。当然,你的真实IP是隐藏起来的。服务器的网管不会认为你使用了代理。
普通匿名代理:能隐藏你的真实IP,但会更改你的request fields,有可能会被认为使用了代理,但仅仅是可能,一般说来是没问题的。不过不要受它的名字的误导,其安全性可能比全匿名代理更高,有的代理会剥离你的部分信息(就好比防火墙的stealth mode),使服务器端探测不到你的操作系统版本和浏览器版本。
elite代理:匿名隐藏性更高,可隐藏系统及浏览器资料信息等。此种代理安全性特强。
透明代理(简单代理):透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP。注意,加密的透明代理则是属于匿名代理,意思是不用设置使用代理了,例如Garden 2程序。
3、按代理服务器的用途分类
1)Http代理:代理客户机的http访问,主要代理浏览器访问网页,它的端口一般为80、8080、3128等。
2)SSL代理:支持最高128位加密强度的http代理,可以作为访问加密网站的代理。加密网站是指以https://开始的网站。ssl的标准端口为443。
3)HTTP CONNECT代理:允许用户建立TCP连接到任何端口的代理服务器,这种代理不仅可用于HTTP,还包括FTP、IRC、RM流服务等。
4)FTP代理:代理客户机上的ftp软件访问ftp服务器,其端口一般为21、2121。
5)POP3代理:代理客户机上的邮件软件用pop3方式收邮件,其端口一般为110。
6)Telnet代理:能够代理通信机的telnet,用于远程控制,入侵时经常使用。其端口一般为23。
7)Socks代理:是全能代理,就像有很多跳线的转接板,它只是简单地将一端的系统连接到另外一端。支持多种协议,包括http、ftp请求及其它类型的请求。它分socks 4 和socks 5两种类型,socks 4只支持TCP协议而socks 5支持TCP/UDP协议,还支持各种身份验证机制等协议。其标准端口为1080。
socks代理相应的采用socks协议的代理服务器就是SOCKS服务器,是一种通用的代理服务器。Socks是个电路级的底层网关,是 DavidKoblas在1990年开发的,此后就一直作为Internet RFC标准的开放标准。Socks不要求应用程序遵循特定的操作系统平台,Socks 代理与应用层代理、 HTTP 层代理不同,Socks代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求)。所以,Socks代理比其他应用层代理要快得多。它通常绑定在代理服务器的1080端口上。如果您在企业网或校园网上,需要透过防火墙或通过代理服务器访问Internet就可能需要使用 SOCKS。一般情况下,对于拨号上网用户都不需要使用它。注意,浏览网页时常用的代理服务器通常是专门的http代理,它和SOCKS是不同的。因此,您能浏览网页不等于您一定可以通过SOCKS访问Internet。常用的防火墙,或代理软件都支持SOCKS,但需要其管理员打开这一功能。如果您不确信您是否需要SOCKS或是否有SOCKS可用,请与您的网络管理员联系。为了使用socks,您需要了解一下内容:
① SOCKS服务器的IP地址
② SOCKS服务所在的端口
③ 这个SOCKS服务是否需要用户认证?如果需要,您要向您的网络管理员申请一个用户和口令
知道了上述信息,您就可以把这些信息填入“网络配置”中,或者在第一次登记时填入,您就可以使用socks代理了。
在实际应用中SOCKS代理可以用作为:电子邮件、新闻组软件、网络传呼ICQ、网络聊天MIRC和使用代理服务器上联众打游戏等等各种游戏应用软件当中。
8)TUNNEL代理:经HTTPTunnet程序转换的数据包封装成http请求(Request)来穿透防火墙,允许利用HTTP服务器做任何TCP可以做的事情,功能相当于Socks5。
9)文献代理:可以用来查询数据库的代理,通过这些代理,可以获得互联网的相关科研学术的数据库资源,例如查询Sciencedirect网站(简称SD)、Academic Press、IEEE,SPRINGER等数据库。
10)教育网代理:指学术教育机构局域网通过特定的代理服务器可使无出国权限或无访问某IP段权限的计算机访问相关资源。
11)跳板代理:应用于跳板程序,可以看作一种具有动态加密的特殊socks5代理,,也可直接用于PSD软件。其端口一般为1813。
12)Ssso代理:代理客户机上的ssso程序访问远程网站,具有SSL加密强度的超级代理,支持socks。
13)Flat代理:代理客户机上的flatsurfer程序访问远程网站,具有高强度加密数据流的特殊代理,支持socks,最大可设置三次级联,可以设置穿越代理。其端口一般为6700。
14)SoftE代理:代理客户机上的SoftEther程序访问远程网站,应用虚拟集线器HUB和虚拟网卡技术,具备***功能及多种认证方式的代理,符合https协议。
三、代理服务器的主要功能
代理服务器一般来讲,对于普通的网民的作用有以下几个(撇开一些高深的用处不谈,因为未必会用到):
1、连接Internet与Intranet 充当firewall(防火墙):因为所有内部网的用户通过代理服务器访问外界时,只映射为一个IP地址,所以外界不能直接访问到内部网;同时可以设置 IP地址过滤,限制内部网对外部的访问权限;另外,两个没有互联的内部网,也可以通过第三方的代理服务器进行互联来交换信息。
2、节省IP开销:如前面所讲,所有用户对外只占用一个IP,所以不必租用过多的IP地址,降低网络的维护成本。这样,局域局内没有与外网相连的众多机器就可以通过内网的一台代理服务器连接到外网,大大减少费用。当然也有它不利的一面,如许多网络黑客通过这种方法隐藏自己的真实IP地址,而逃过监视。
3、通过它来加快我们浏览某些网站的速度:有时候我们访问一些国外或者港台网站,速度慢得像蜗牛一样,但只要你正确的选用代理服务器,速度就可以得到提升,有时候这些速度的提升可是很明显的哦!本身带宽较小,通过带宽较大的proxy与目标主机连接。而且通常代理服务器都设置一个较大的硬盘缓冲区(可能高达几个GB或更大),当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,从而达到提高访问速度的目的。
4、通过它,我们可以访问到一些平时不能去的网站:不信你可以马上打开你的浏览器和输入“wwwgeocitiescom”这个网址。怎样?不用看着浏览器在这里空等了,并不是你的网络速度慢,也不是没有这个网站,而是你访问不到它(网络上还有很多这些类型的网站)。为什么访问不到?这个问题嘛说法有很多种,大部分都说是国内的网络被限制了访问,所以某些网站是不能去的。如果你在以往浏览过程中出现过以上的情况,那么看来你有必要尝试一下使用代理服务器了。至于如何可以访问到这些网站? 请您继续阅读本系列文章!
https的SSL加密是在传输层实现的。
(1)http和https的基本概念
http: 超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
https: 是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
https协议的主要作用是:建立一个信息安全通道,来确保数组的传输,确保网站的真实性。
(2)http和https的区别?
http传输的数据都是未加密的,也就是明文的,网景公司设置了SSL协议来对http协议传输的数据进行加密处理,简单来说https协议是由http和ssl协议构建的可进行加密传输和身份认证的网络协议,比http协议的安全性更高。
主要的区别如下:
Https协议需要ca证书,费用较高。
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
使用不同的链接方式,端口也不同,一般而言,http协议的端口为80,https的端口为443
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
(3)https协议的工作原理
客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。
客户使用https url访问服务器,则要求web 服务器建立ssl链接。
web服务器接收到客户端的请求之后,会将网站的证书(证书中包含了公钥),返回或者说传输给客户端。
客户端和web服务器端开始协商SSL链接的安全等级,也就是加密等级。
客户端浏览器通过双方协商一致的安全等级,建立会话密钥,然后通过网站的公钥来加密会话密钥,并传送给网站。
web服务器通过自己的私钥解密出会话密钥。
web服务器通过会话密钥加密与客户端之间的通信。
(4)https协议的优点
使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。
(5)https协议的缺点
https握手阶段比较费时,会使页面加载时间延长50%,增加10%~20%的耗电。
https缓存不如http高效,会增加数据开销。
SSL证书也需要钱,功能越强大的证书费用越高。
SSL证书需要绑定IP,不能在同一个ip上绑定多个域名,ipv4资源支持不了这种消耗。
WWW的核心——HTTP协议
众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP、Archie Gopher等是建立在TCP/IP协议之上的应用层协议,不同的协议对应着不同的应用。<BR> WWW服务器使用的主要协议是HTTP协议,即超文体传输协议。由于HTTP协议支持的服务不限于WWW,还可以是其它服务,因而HTTP协议允许用户在统一的界面下,采用不同的协议访问不同的服务,如FTP、Archie、SMTP、NNTP等。另外,HTTP协议还可用于名字服务器和分布式对象管理。
21 HTTP协议简介
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/10的第六版,HTTP/11的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
HTTP协议的主要特点可概括如下:
1支持客户/服务器模式。
2简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。
由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量龃蟆A硪环矫妫�诜�衿鞑恍枰�惹靶畔⑹彼�挠Υ鹁徒峡臁
22 HTTP协议的几个重要概念
1连接(Connection):一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间。
2消息(Message):HTTP通讯的基本单位,包括一个结构化的八元组序列并通过连接传输。
3请求(Request):一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号
4响应(Response):一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如“成功”或“没找到”)和文档的MIME类型。
5资源(Resource):由URI标识的网络数据对象或服务。
6实体(Entity):数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的本身内容。
7客户机(Client):一个为发送请求目的而建立连接的应用程序。
8用户代理(User agent):初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。
9服务器(Server):一个接受连接并对请求返回信息的应用程序。
10源服务器(Origin server):是一个给定资源可以在其上驻留或被创建的服务器。
11代理(Proxy):一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前,必须解释并且如果可能重写它。
代理经常作为通过防火墙的客户机端的门户,代理还可以作为一个帮助应用来通过协议处理没有被用户代理完成的请求。
12网关(Gateway):一个作为其它服务器中间媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器;发出请求的客户机并没有意识到它在同网关打交道。
网关经常作为通过防火墙的服务器端的门户,网关还可以作为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。
13通道(Tunnel):是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于HTTP通讯,尽管通道可能是被一个HTTP请求初始化的。当被中继的连接两端关闭时,通道便消失。当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通讯时通道被经常使用。
14缓存(Cache):反应信息的局域存储。
1、URL不同
HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头。
2、安全性不同
HTTP 是不安全的,而 HTTPS 是安全的。
3、标准端口不同
HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443。
4、加密性不同
HTTP 无需加密,而 HTTPS 对传输的数据进行加密。
5、证书认证不同
HTTP 无需证书,而 HTTPS 需要认证证书。
扩展资料:
HTTPS和HTTP的应用
银行网站、支付网关、购物网站、登录页、电子邮件以及一些企业部门的网站应该使用 HTTPS,例如:PayPal: https://wwwpaypalcom
尽管HTTPS是现行架构下最安全的解决方案,但也并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击。
此外,使用HTTPS协议连接网页存在一定的网页加载延时(效率和安全性二者不可得兼),同时,SSL证书并不免费,功能越强大的证书费用越高,个人网站、小网站若没有必要,一般不会使用HTTPS。
-http
-https
目录
我的操作是这样的,让手机和电脑在同一个局域网内(比如连接同一个 wifi),接着在手机的wifi上设置代理,电脑使用 Charles 做代理,IP 为电脑在局域网 IP,我这边的环境,手机 IP 为 1721732117,电脑 IP 为 172173219。再设置代理端口为 8888。设置代理后,接下来手机的请求都会通过电脑的网卡代理请求发送出去。
其实可以不用这么绕。我之所以多设了一个代理,是因为自己电脑创建的 wifi 热点,手机接收不到。为了让手机的包能经过电脑网络嗅探到才这么处理的。
最便捷的方式,就是电脑放个 wifi 热点给手机连接完事。
创建后代理连接后,然后使用 Wireshark 嗅探网卡,比如我这里使用的是 etho0 网卡去访问网络的。这时候玩玩手机,打开几个请求,Wireshark 上面就会出现捕捉的大量的包,各种各样的协议都有,有 ARP 寻人启事(寻找 IP 对应的物理地址),有 TCP 连接包,有 HTTP 请求包。
这里我设置了一下过滤规则,把对网易的一个 https://nex163com 的一个的请求过滤出来如下:
整个完整的 HTTPS 请求的过程如下:
接下来把手机称为 A(1721732211),电脑称为 B(172173219),对完整的过程进行简要分析。
作为整个过程的第一个 TCP 包,这里对它做一个详细的剖析,理解一下 TCP 报文的格式和内容。TCP 是传输层协议,负责可靠的数据通信,它在整个体系结构的位置如下:
作为传输层协议,主要为上层协议提供三个功能:
TCP 协议为 HTTP 和 SSL 协议提供了基础的通信功能。所以 SSL 协议是基于 TCP 的。
三次握手的内容有:
对每个包进行详细的分析:
A 发出一个带 SYN 同步位的包,通知服务端要建立连接 。
第一次握手,发出的 TCP 包的数据和 Wireshark 解析的结果如下:
灰色部分就是 TCP 报文的数据内容,第一个两个字节 0x8c85 = 35973 表示源端口。
TCP 报文的格式如下,对应的如上图的灰色部分。非灰色部分分别为 IP 首部和数据帧首部。
参考谢希仁版本的 《计算机网络》一书,对照着整个报文格式表,把整个 TCP 报文的二进制信息和相关意义做些说明:
到这里的话,TCP 数据报首部固定部分结束,固定部分一共有 20 字节。也就是 TCP 首部,至少要有 20 字节。
固定首部后,就是可长度可以变化的选项了:
整个所以 TCP 数据包的大小可以这样表示:
我们 Wireshark 后面的一长串的信息就指出了该 TCP 报文的一些主要信息:
从上面的分析可以看出,这个 SYN 包并没有携带数据,但是按协议这里要消耗一个序号。
在发出 SYN 包后,A 端进入 SYN-SENT 状态。
B 收到 SYN 包,发出 SYN + ACK 确认包 。
这个包,既是确认收到了第一次握手的包,也是一个由 B 端发出的同步包,表示自己准备好了,可以开始传数据了。
TCP 报文包相对于第一次握手的包可以窥见一些变化:
可以看到,这个包的应答时间戳刚好是第一次握手的发送时间戳。从这里也可以理解到,这个包就是在响应第一次握手的包
所以,接收方 A 可以利用这个值来计算这一次 RTT ,收到第二次握手的包后,计算当前时间戳减去该包的应答时间戳就是一个 RTT 的延时了。
这虽然是 ACK 包,但也是 SYN 包,所以也要消耗一个序号。
在发出这个包后,B 端进入 SYN-REVD 状态。
A 收到后,再发出一个 ACK 确认包
发出的包如下:
这里我们产生一个疑问,这里发送端 A 发连接请求信息、接收端 B 发确认信息,又互相同步了序号,是不是已经可以传输数据了?但实际上 A 还要再发一个 ACK 确认报文,如图所示,确认收到了 B 第二次握手发出的包,这个时候,在这个 ACK 包后 A 和 B 才正式进入 ESTABLISHED 状态。这就是第三次握手。
这是为什么呢?
假设我们用两次握手,然后在第一次握手期间,A 发了第一次握手包后出现了这样的场景:一直没有得到响应而进行超时重传,又发了一次包,然后我们称上一次包为失效包。
然后我们可以看到:
所以,只有接收端 B 在发送端 A 发出了第三次握手包后,才认为连接已经建立,开始等待发送端 A 发送的数据,才不会因为失效的连接请求报文导致接收端异常。
TCP 三次握手的时序图如下:
三次握手,有几个重要的任务,一个是 同步序号 ,接收端和发送端都发出同步包来通知对方初始序号,这样子后面接收的包就可以根据序号来保证可靠传输;另一个是让发送端和接收都 做好准备 。然后就开始传数据了。
整个过程都发生在 HTTP 报文发出之前。HTTP 协议就是依靠着 TCP 协议来做传输的管理。TCP 可以认为是它的管家,管理着传输的大大小小的事务,比如要不要保证包顺序一致?什么时候发包?要不要收包?TCP 是很严格的。
三次握手在 Java API 层面,对应的就是 Socket 的连接的创建(最终调用的是 native 层的 socket 创建):
这里的 connectTimeout 对应的是三次握手的总时长,如果超时了就会被认为连接失败。
比如一个场景,客户端发出一个 SYN 报文后,迟迟没有收到服务端的 SYN + ACK。这时候客户端触发重传机制,每次重传的间隔时间加倍,同样没有收到包。然后如果这段时间超出了连接超时时间的设置,那么建立连接超时就发生了。
所以,如果三次握手要花的时间,总是大于这里的 connectTimeout 时间,这个 Socket 就无法建立连接。
我们这一次请求的三次握手时间在 180ms 左右。
像在 OkHttp 中,如果是三次握手阶段的连接超时,是会有重试机制的。也就是重新建联,重新发出 SYN 报文发起 TCP 连接。重新建联的时候会更换连接的路由,如果已经没有可选择路由的话,那么这个就真的失败了。
在 OkHttp 390 的默认配置中,连接超时的时间为 10000ms = 10s。在 OkHttpClientBuilder 中。
实际应用的时候,根据业务场景来调整。
这次请求,为了让 Wireshark 抓到手机的包,我使用了电脑作为代理。
其实就是客户端 A 使用 HTTP 协议和代理服务器 B 建立连接。和普通的 HTTP 请求一样,需要携带 IP + 端口号,如果有身份验证的时候还会带上授权信息,代理服务器 B 会使用授权信息进行验证。然后代理服务器会去连接远程主机,连接成功后返回 200。
Wireshark 抓到的包有这样两条信息,就是在创建代理:
请求报文:
响应报文:
HTTP CONNECT 是在 HTTP11 新增的命令,用于支撑 https 加密。
因为我采用代理的方式抓包才有这一个步骤。如果是直接抓 PC 机上浏览器发出的 HTTPS 包,不会有这个过程。
然后我们思考一下,为什么代理服务器需要这些信息,要连接的主机名和端口号?
这是因为后面进行 SSL 加密 HTTP协议,因为代理服务器拿不到加密密钥,是无法获取到 HTTP 首部的,进而无法这个请求是要发到哪个主机的。所以,这里先使用 CONNECT 方法,把主机名和对应的端口号通知代理服务器。
这个也被称为 HTTPS SSL 隧道协议。建立这个 SSL 隧道后,这个特殊代理就会对数据进行盲转发。
SSL 整个协议实际上分两层,SSL 记录协议和其他子协议(SSL握手协议,SSL改变密码协议,SSL警告协议):
这两层协议的关系,其实就是数据封装的关系,SSL 握手封装协议封装其他上层协议。
封装握手协议:
封装应用数据协议,比如 HTTP:
封装交换密码协议:
封装警报协议:
所以 SSL 记录协议其实就是一个其他协议的载体,只是提供了一个封装的功能。它的格式为:
MAC 就是消息验证码,用来验证数据的完整性,保证中途没有篡改。这个消息验证码比数字签名弱一些,使用的是对称密钥加密摘要。数字签名使用的是非对称密钥加密,有区分公钥私钥。
记录协议的主要目的有这几个,为其他 SSL 子协议提供了以下服务:
TCP 三次握手结束并且和代理服务器成功连接后,建联成功,客户端 A 就开始发起 SSL 连接,首先会进入 SSL 握手阶段。
SSL 握手阶段的主要目的有这么几个:
SSL 握手的流程并不是一成不变的,根据实际的应用场景来。主要有三种:
SSL 握手的完整的交互过程如下,这里是验证服务端又验证了客户端的情况:
我们的请求只验证服务端,所以 7,8,9 是不存在的。
现在具体分析每一个阶段的内容。
Client Hello
作为 SSL 握手的第一个握手包,我们详细分析和理解一下包的内容。
下面是 Wireshark 解析好的这个 SSL 协议的数据包:
这个包如何解读,按照之前对 SSL 协议的分析,其实分成两个部分:
因为是握手过程,密钥还没协商,这里还是使用明文传输,记录协议的数据载体就是明文的 SSL 握手协议。
SSL 握手协议的格式为:
我们可以从握手协议的数据包中得到这些信息:
密码套件随着密码学的发展而发展,而且根据现实应用中,可能会有某些密码被破解,从而导致密码套件可能会导致安全问题,所以一般都会使用当前最新最安全的密码套件。
在 Android 系统中,一般情况下,使用 SSLSocket进行连接的时候,会带上系统默认的支持的密码套件。但是这个有个缺点,比如某些密码套件的加密算法被破解或者出现安全漏洞,而且要跟着系统升级反应缓慢。OkHttp 在进行 SSL 握手的时候,会使用 ConnectionSpec 类中带上提供了一系列最新的密码套件。可以从注释上看,这些密码套件在 Chrome 51 和 Android 70 以上得到了完全支持。
然后,再把这些密码套件和 Android 系统支持的密码套件取交集,提交给服务端。这样,万一哪个密码套件有问题,OkHttp 官方会下降支持。网络库 OkHttp 库会随着版本的迭代,不断地去提供比较新的密码套件,并且放弃那些不安全的密码套件。接入应用即时更新 OkHttp,就不用等待缓慢的系统更新了。
如果提供的所有密码套件服务端都不支持,OkHttp 有回退机制,退而求其次,选比较旧的套件。
Server Hello
服务端收到了客户端的 Hello,通过客户端的配置信息,结合服务端的自身情况,给出了最终的配置信息。
Wireshark 解析后的内容如下:
具体内容如下:
Certificate
上面的 Server Hello 已经制定了接下来的非对称加密算法
服务端下发证书,客户端验证服务端的身份,并且取出证书携带的公钥,这个公钥是交换加密算法的公钥。也就是在 Server Hello 阶段指定的 ECDHE (EC Diffie-Hellman)算法,也是通常说的 DH 加密。
这个 Certificate 消息下发了从携带自己公钥的数字证书和 CA 证书的证书链,在 Certificates 字段中:
CA 是 PKI 体系的重要组成部分,称为认证机构。
那什么是 CA 证书?就是用来 CA 中心发布的,认证该服务单证书的合法性,可以确保该证书来源可靠而不是被中间人替换了。但是 CA 证书也可能被中间人拦截造假?那就再用一个证书来认证它。看起来好像没完没了。实际上到最后有一个根 CA 证书,这个证书存储再浏览器或者操作系统中,是系统直接信任的。
服务端证书需要 CA 证书做认证。使用的还是数字签名方式,从数据中摘要一段信息,用 CA 证书的加密。然后验证的时候时候,用 CA 证书的公钥解密,用同样的摘要算法摘要数据部分和解密好的信息进行比较。
客户端在验证服务端证书的有效性有这样的一个过程。首先会找到该证书的认证证书,也就是中级 CA 证书。然后找中级 CA 证书的认证证书,可以是另一个中级 CA 证书,也可能是根 CA 证书。这样直到根 CA 证书。
接着从根 CA 证书开始往下去验证数字签名。比如有这样的证书链:根 CA 证书-> 中级 CA 证书 -> 服务端证书。用 CA 证书的公钥去验证中级证书的数字签名,再用中级证书的公钥去验证服务器证书的数字签名。任何一个环节验证失败,就可以认为证书不合法。
这就是整个证书链的认证过程:
查看抓到的包的数据,发现只有两个证书。为服务端证书和中级 CA 证书。根 CA 证书呢?顺藤摸瓜找到它。
首先看服务端证书。它内容如下:
从这个证书中我们可以窥见这些信息:
首先是 signedCertificate 字段的内容,即数字证书的数据:
然后是证书颁发机构的签名信息:
从上面的 issuer 可以了解到,认证该服务器证书的 CA 证书为 GeoTrust SSL CA - G3 ,我们从 Certificates 找到对应的中级证书的内容如下(中级证书可以有好几级,我们这儿只有一级):
可以得到中级证书名为 GeoTrust SSL CA - G3 ,证书组织为 GeoTrust Inc 。
认证该 CA 证书的证书呢?还是看 issue 字段,认证证书名为 GeoTrust Global CA ,组织同样是 GeoTrust Inc 。
其实这个就是根 CA 证书。在这个请求中没有找到,但在浏览器或者操作系统可以找到。一般的浏览器和系统都会内置该 CA 证书。所以根证书是受浏览器或者操作系统信任的,无需其他证书做担保。
如果想要自己的系统再信任某些非通用的权威机构的根 CA 证书,那么就去安装它。
比如我的 Windows 系统就安装了 GeoTrust Global CA 证书:
像我们平时使用 Charles 抓 HTTPS 就是这个原理,把 Charles 的 CA 证书安装在手机中,成为受信任的根 CA 证书。
基本原理就是,Charles 代理作为 SSL 隧道,并没有透明传输,而是作为一个中间人,拦截了 SSL 握手信息,修改里面的 CA 证书。仿冒手机端和真实服务端建立连接获取主密钥,然后又仿冒服务端和手机客户端建立 SSL 连接,修改服务端证书的 CA 和数字签名,这样 Charles 就可以解析到加密的 HTTP 内容了。
修改后的服务端证书如下,可以看到 issuer 被替换成了 Charles 的证书。
0条评论