网络空间安全通识教程
上QQ阅读APP看书,第一时间看更新

2.3 互联网协议

2.3.1 HTTP

HTTP(Hypertext Transfer Protocol)全称是超文本传输协议,是Web的核心传输机制,也是服务端与客户端之间交换URL引用文档的首选方式。尽管名字里包含了超文本这几个字,但HTTP和真正的超文本内容(HTML语言)其实彼此独立。当然,在某些时候,它们会以一种令人意想不到的方式交织在一起。设置HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

HTTP是由蒂姆·伯纳斯·李于1989年在欧洲核子研究组织(CERN)发起的。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,他们最终发布了一系列的RFC,其中最著名的是1999年6月公布的RFC 2616,其定义了HTTP中现今广泛使用的一个版本——HTTP/1.1。

HTTP/1.1中共定义了8种方法来以不同方式操作指定的资源。

GET

GET方法对信息的获取至关重要。实际上,所有常规浏览会话在“客户端—服务器”交互时都在使用GET方法向指定资源发送“显示”请求。

POST

POST方法与GET方法一样,都是向服务器发送指定资源的请求。POST请求通常都会带有表单数据,这段数据的长度要明确地设置在Content-Length请求头里。

HEAD

HEAD是一种很少用的方法。本质上HEAD接近GET方法,只不过服务器不传回资源的文本部分。

OPTIONS

OPTIONS是一种元数据请求。服务器会根据客户端请求的URL地址,在一个响应头里返回其所能支持的全部方法列表。

PUT

PUT请求用来向服务器特定的目标URL上传文件。但是因为浏览器并不支持PUT方法,常规文件的上传功能一般是用POST方法提交给服务器端脚本来实现的。

DELETE

请求服务器删除Request-URL所标识的资源。

TRACE

TRACE是一种“ping”形式的请求。回显服务器收到的请求,主要用于测试或诊断。

CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

2.3.2 DNS

域名系统(Domain Name System,DNS)是一个可以将域名和IP地址相互映射的分布式数据库。由于它是互联网的核心服务之一,且在其中扮演着极为重要的角色,其安全与否对整个互联网的安全性有着重要的影响。在DNS协议设计之初,设计者并未过多地考虑安全问题,因此导致DNS本身留有很多安全隐患。

DNS通过允许一个名称服务器把它的一部分名称服务“委托”给子服务器,实现了一种层次结构的名称空间。此外,DNS还提供了一些额外的信息,例如,系统别名、联系信息以及哪一个主机正在充当系统组或域的邮件枢纽。

任何一个使用IP的计算机网络可以使用DNS来实现它自己的私有名称系统。尽管如此,当提到在公共的Internet DNS上实现的域名时,术语“域名”是最常使用的。这基于全球范围的504个“根域名服务器”(分成13组,编号分别为A~M)。从这504个根服务器开始,余下的Internet DNS命名空间被委托给其他的DNS服务器,这些服务器提供DNS名称空间中的特定部分。

2.3.3 VPN

虚拟专用网(Virtual Private Network,VPN)是指在公共网络提供的信息传输平台基础上,通过建立虚拟隧道,使信息在隧道中安全可靠地传输的一种网络传输模式。VPN技术让跨国、跨地区企业可以通过Internet建立一个安全、高效的企业内部网,位于不同区域的用户像使用企业内部网络一样使用VPN中的资源。

可以用以下日常生活中的例子来比喻虚拟专用网。甲公司某部门的A想寄信给乙公司某部门的B。A已知B的地址及部门,但公司与公司之间的信不能注明部门名称。于是,A请自己的秘书把指定给B所属部门的信(A可以选择是否以密码与B通信)放在寄给乙公司地址的大信封中。乙公司的秘书收到从甲公司寄给乙公司的信件后,便会把放在该大信封内的指定部门信件以公司内部信件的方式寄给B。同样地,B会以同样的方式回信给A。

在以上例子中,A与B是身处不同公司(内部网络)的计算机(或相关机器),通过一般邮寄方式(公用网络)寄信给对方,再由对方的秘书(例如,支持虚拟专用网的路由器或防火墙)以公司内部信件(内部网络)的方式寄至对方本人。

2.3.4 SSH

安全外壳(Secure Shell,SSH)协议是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH实现安全传输,但SSH最常见的用途还是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。使用频率最高的场合是UNIX系统,Windows 10开始也实现了内置SSH协议支持。

在设计上,SSH是Telnet和非安全Shell的替代品。Telnet和Berkeley rlogin、rsh、rexec等协议采用明文传输,使用不可靠的密码且容易遭到监听、嗅探和中间人攻击。SSH旨在保证非安全网络环境(例如互联网)中信息加密的完整可靠。

SSH以非对称加密实现身份验证。身份验证有多种途径,一种方法是使用自动生成的公钥—私钥对来简单地加密网络连接,随后使用密码认证进行登录;另一种方法是人工生成一对公钥和私钥,通过生成的密钥进行认证,这样就可以在不输入密码的情况下登录。任何人都可以自行生成密钥,公钥放在待访问的电脑中,而对应的私钥则由用户自行保管。认证过程基于生成出来的私钥,但整个认证过程中私钥本身不会传输到网络中。

SSH协议有两个主要版本,分别是SSH-1和SSH-2。无论哪个版本,核实未知密钥来源都是很重要的,因为SSH只验证用户是否拥有与公钥相匹配的私钥,只要接受公钥且密钥匹配,服务器就会授予许可。这样,一旦接受了恶意攻击者的公钥,那么系统也会把攻击者视为合法用户。