SSL上的HTTP
9.1介绍
HTTP(超文本传输协议)提供与SSL固定协议的一个自然的例子。它是第一个使用SSL的协议并且至今为止仍然是最重要的固定协议。标准的方法,在几乎所有的网页浏览器和服务器中是使用一个分离的接口策略,而IETF在HTTP升级到TLS的谈判技术上已经使其标准化了。这一章从高水平的网安全问题的一次讨论着手,包括对于基本的网技术的介绍。然后我们讨论HTTP与SSL的传统的途径(HTTPS,在RFC 2818描述了)和它怎么与这些网技术互相配合。这引发了一场更新的HTTP升级技术的讨论(在RFC 2817描述了)以及它怎么与HTTPS匹配。最后,我们讨论SSL使用HTTP时经常遇到的一些编程问题。
9.2固定网
原型的网络安全申请是服从一台网络服务器的信用卡。
用户在他的虚拟购物车中浏览一些网站并且放置许多的项目。
总的来说,这一步不用任何安全保护.一般假定的数据不敏感-即使你可能正在买一些令人困窘的东西。
安全的需求只是在客户准备好办理退房手续的时候。
为了这样做,顾客需要提供他的信用卡号码给服务者。
因为作为用户任何有信用卡号码的人能使用并且动用经费,显然我们需要为信用卡保密。
而且,用户需要确信他提交信用卡对应的是正确的服务者以免一名假冒的服务者盗取他的信用卡。
在校验上,服务器将安全的页传递给用户,并且能在此写入信用卡号码和截止日期.这条信息安全地被提交以后,用户需要被安全地交付为了阻止攻击者静静地阻塞顺序。
为这个应用程序,我们的安全要求是很简单的.我们需要在顾客和服务者和用户之间提供数据保密来确保他的顾客被连结到正确的服务器上。
其它的应用可能有更先进的安全需要,但是任何网安全协议需要至少满足这些要求。
基本技术
在我们讨论安全以前,理解生成万维网基础结构的基本技术是很重要的。
我们需要考虑的三种技术是HTTP,HTML和URLs。
HTTP
HTTP(超文本传输协议)是网络的基本传输协议。
网络是一个客户机/服务器系统需要存在在服务器和客户机之间传输移动数据的机制.HTTP提供那机制.大多数网络浏览器使用其它的协议,例如FTP,但是绝大多数网络传输使用HTTP协议。
HTML
HTML(超文本标注语言)基本上是Web.HTML的文本格式是美国信息交换标准代码本文的一个被提高的版本
它提供的两个最重要的特征是能够构造文件指明段落,排队中断等等.并且提供链接的能力.链接允许用户从一份文件点接到另外一个。
URLs
URLs(统一的资源定位器)规定在链接参考使用.每一个HTML链接在用户链接上浏览器后告诉它做什么。
在理论上URLs能够描述任何协议上获取的数据但实际上他们主要涉及HTTP上获取的数据。
实际的考虑
真实世界网络环境的若干特征从我们迄今已经建议的简单的客户机/服务器模型来看还不明显。
当我们考虑网络安全问题时这些特征中证明有三种有特别的联系:连接行为,代理和虚拟的主机。
连接行为
大多数网页在页面上包含许多嵌入(“嵌入”)的图象。
这些图象必须分别地被它们自己的HTTP请求提取。
由于性能的改进,大多数顾客执行并行执行这些提取。
这样,任何页实际上包括广阔的请求序列。
为了保证合理的性能,我们需要保证每一个存在的请求开销最小。
代理
大量的网络交易从大的企业内网络环境产生。
这些企业网与因特网的连接经常被防火墙隔开,并且整个代理仅仅利用因特网被允许的资源.一个成功的网络安全解决方案必须通过代理。
虚拟主机
它对一个单一的服务器(例如一个ISP服务器)通常为许多组织的主机网络站点。
例如 ,对于ISPs来说提供网际服务是相当通常的事情,信用卡清除的提议太小而无法有他们自己的商业帐户。
自然地,每个商人愿意拥有自己的网络服务即使大多数服务事实上与其他的商人服务一样的运行。
被称为了虚拟主机的技术使这成为可能,但是它安全交互是非常不好的。
安全考虑
一旦我们理解我们想要执行那些交易和他们需要工作的网协议和环境的种类,我们就能够考虑怎么提供适当的安全服务。特别地,我们需要理解在第7章中我们将要遇到的需要讨论的重要问题:协议选择,顾客认证,参考书完整性和连接语义。
9.3 HTTP
这节提供HTTP的简短概要,描述在[Fielding 1999]。
我们的目的不是提供充分的描述;目的是被许多其它的来源充满,包括[Stevens 1994].另外,我们的目的是对HTTP进行描述以便我们能充分地讨论SSL固定HTTP意味什么。
这样,我们将集中安全和SSL最相关的细节。
概念地,HTTP是一个简单的协议.HTTP相互作用的基本的单位是请求/反应对。
顾客对服务者打开TCP连接并且写请求。
服务者回信反应。
服务者显示反应的结束或者以一个长标题或者以简单的标题或简单地关上连接。
请求
一个HTTP请求由三部分组成,请求行,标题和可选择的身体组成。
请求行简单地是单个的行。
标题是一系列分开冒号的关键字数值对,并且身体是任意的数据。
标题和身体被单个的柔和的行分开。
数字9.1显示一个请求样品。
GET / HTTP/ 1.0
Connection : Keep-Alive
User-Agent: Mozi11a /4.7 [en] (x11 ; U; FreeBSD 3.4 -STABLE i386)
Host: www.rtfm.com
Accept : image /gif, image/ x-xbitmap , image/jpg, image/pipeg, image / png, */*
Accept-Encoding:gzip
Accept-language: en
Accept-charset : iso-8859-1 , * ,utf -8
(blank line)
图9.1一个HTTP请求
由请求行和标题在图9.1中被显示出的请求简单地组成。
第一行(从着手得到)是请求行。
其余请求是标题。
HTTP请求行的格式是方法请求-URL HTTP-版本
HTTP/1.1 RFC定义7种请求方法:选择,获到,标头,邮寄,放,删除,痕迹
许多另外的方法由WEBDAV确定[Goland 1999]。
我们不需要关心有关各种各样的请求方法之间的差别。
两种最普通的方法获到和邮寄。
他们之间唯一相关的差别是而帖子可以有消息而身体没有。
如我们正在试用存取的资源的名字请求-URL应该被想到。
总的来说,它好像UNIX路径名字,例如/foo/bar/baz。
最后它也可以有一系列议论。
最后,HTTP版本通常是HTTP/1.0或HTTP/1.1 ,HTTP/1.1是IETF上正在标准化的但是我们一般忽略2个版本之间的差别。
许多的首领域是可能的但是其中的大多数与SSL没有任何相互作用。
然而在图9.1中请求确实是有一条相关的行,然而连接首领显示顾客希望服务者在反应以后使连接断开。
这样,坚持-激活与SSL闭锁过程互相配合。
在图9.15中我们将进一步讨论其相互作用。
所有顾客向服务者传送的信息是顾客请求。
这样,如果我们要固定那个数据,我们必须保证顾客的请求密码化。
注意这必然包括固定请求排成一行因为客户的资源相同可能它本身是敏感的
显然,规定这项服务要求顾客知道它与正确的服务者正在谈话。
响应
HTTP 响应和请求有很类似的格式。
唯一的差别是请求队列被显示服务器如何处理请求的地址队列所代替。
地址队列的格式是HTTP版本地址代码原因短语
HTTP版本与请求一样。
地址编码是显示服务器采取了的行动的数字的代码。
总的来说这将为一个成功的请求或一些另外的数字是 200 (300套代码被用于显示一些另外的非错误的请求没在其被满足的条件)我们将很少看见更多的地址编码当我们在 9.21节升级时,提示短语对于发生了什么只是简单的文本描述。
为了成功的传输这通常是好的。
图 9.2 成功的显示了 HTTP 响应-图 9.1 的请求的响应。
在图 9.2 被显示出的响应说明了很多要点 .First 记录 HTTP/1.1 200 是很好的地址线,表明请求成功了。
另外,注意下列 3 个标题领域:
Content-length:1650
Keep-Alive : timeout=15, max=100
Connection : Keep-Alive
保持激活和连接:保持激活标题领域显示服务器将在送反应以后不停止连接。这意谓着当回应从回应的内容结束的时候 , 客户将不得不做出决定。 内容- 长度标题告诉我们信息的本身是类型本文 / html, 指示本身是一份 HTML 文件。
明显地,如果要固定的 HTTP 事务处理有意义, 我们一定向回应提供安全。这不但意谓它能够确定从攻击者看是安全的而且那没有攻击者能形成服务器为了要把数据传送给客户或数据在传送过程中受到影响。
9.4 HTML
HTML(超文本标识语言) 是一些简单的美国信息交换标准代码文本,它由一系列的把结构加入文件的标记(称为标签)组成。 举例来说 <p> 标签表明开始一个新的段落。 一个网络浏览器包含一个 HTML 分析器它如输入和输出一样获取HTML的过程格式页。 注意因为涨价描述结构而不是地面区划,超过一个格式到给定的页。
HTML 我们需要的唯一方面是关心它包含的连接。 一个连接只是页中到内容的另外一个内容的叁考。内容能依次 被网络浏览器获得 , 通常使用 HTTP 除了有时使用一些其他的记录。
Data : Sat, 15 Jan 2000 05:15 GMT
Server : Apache/1.3.1 (UNIX)
Last-Modified: Tue, 22 Jun 1999 19:25:14 GET
Etag : “2a99d-672-376fe31a”
Accept-Ranges: bytes
Content-Length:1650
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html
<!DOCTYPE HTML PUBLIC “-//W3C// HTML 3.2 Final // EN”>
<HTML>
<HEAD>
<TITLE>RTFM</TITLE>
</HEAD>
<!—Background white, links blue (unvisited), navy (visited), red (active) à
< BODY
BGCOLOR=”#FFFFFF”
TEXT=”#000000”
LINK=”#0000FF”
VLINK=”#000080”
ALINK=”#FF0000”
>
<CENTER>
< A HERF=”contact.html”>
< IMG SRC=” rtfm.gif” BORDER=0></A>
</CENTER>
Deleted text
RTFM in cooperation with claymore systems is releasing a free Java SSLv3/TLS implementation :<A HREF=”/ puretls> PURETLS” </A>.
<P>
<CENTER>
<A HREF= “contact.html”> Contact Us</A>
</BODY>
</HTML>
锚
最熟悉连接类型被称为锚。 这只是被附以附件的HTML( 典型本文的一个区域 ) 的一个区段在这样的方法下它符合给定的叁考。点击对应荧屏 HTML 的那个区段的区就会引起浏览器接收被指示的内容。 当你在网络浏览器点击各种不同闪亮部分和带下划线连接的时候,你正在使用锚。 HTML 页在图 9.2 中包含一个锚:
出现在荧屏上的东西是 PureTLS 中带下划线的文本。 点击带下滑线的部分就会引起浏览器撤消文档中由puretls指向的连接( 在网络服务器: www.rtfm.com上获得最原始的文本). HREF="/puretls" 是叙述连接的目标 。 连接 ( 在这情况线 / puretls) 的目标叫做一个统一的资源定位器。 (网址) 在9.5章中我们将讨论连接被区域定义等同于<A HREF="/ puretls">( the start tag )和</A> (the end tag).
线内图像
连接的另一种类型是所谓的一个线内图像。不像一个锚,它只会呆在一个地方直到使用者点击,浏览器自动地获取线内图像并在图像标签出现的 HTML 中的位置将他们放入网页。(因为 HTML 页取决于浏览器位置,位置大体上是模糊的). 每当你在网页中看见一张照片,那是某种线内图像。甚至卡通影片也被作成线内图像的一中。HTML 页在图 9.2 中包含关於线内图像: IMG 标签基本上像一个它所使用领域的 SRC标签,并非携带网址对内容的 HREF 叁考。因此,包含在文件 rtfm.gif(RTFM's 图形) 中的照片将会在页中被显示。这个标签也包含边缘=0个属性, 指示图像没有任何的边缘应被呈现。 注意线内图像的安全优越性不可能与页叁考安全优越性相同,因为图像时常被当作页的意义 使用, 这些不同于隐藏页,浏览器应该清楚地指出。
表格
我们最后将会考虑的是一中通常被称为网格的连接类型。
虽然网络形式的落实是复杂的,但是 形式是非常简单和熟悉的。
网页给出许多用户接口如 文本框和下拉菜单 。
还有一个特别的按钮叫委托钮扣。
有时它甚至被称为“委托”。
使用者由于在某些方面互相影响,说他有哪一类型的信用卡和他想要支付信用卡数字和充填物。
当他完成了他的时候就点击那委托钮扣。
象变魔术发生:
浏览器拿所有页面同时建立一携带他们的价值线。
然后它申请服务器(到与URL有关形式的网址) 而且使用经过的价值请求。
表(以及所有的连接)都能用一个方法类型来标识,这个方法类型在不同于HTTP方法类型的连接时使用。这两种相关的方法是发送和接收。这两者之间有个简单的区别:在接收时,表中一个区域内的属性值连接到请求行的URL地址;而在发送时,它被放入消息正文。
动态内容:
网页还可以包含一系列的动态内容:可以被网络客户执行的代码。这些代码可以直接为HTML执行,也能由一个被引用类似嵌入的图象连接。这代码能在许多语言中执行,包括Java,JavaScript和VBScript。它还可以连接到二进制程序,然后被装入Web浏览器的内存。这称为“插入”。
9.5 统一资源管理器
统一资源定位器是万维网中的基本概念。统一资源定位器的想法是提供认明任何网络可连接的资源的单个的连接。它为各式各样的不同的存取方法提供一个统一的接口。一个统一资源定位器可以引用经由 HTTP 可接近的一个文件, 例如FTP , gopher ,或甚至指示浏览器创造一条邮件消息。这就省去了用户以前要熟练掌握的任何特殊的存取方法 (例如,匿名的 FTP )。
统一资源定位器是极其复杂的,并且它们还在不同的存取方法之间变化.(查看[ Berners-Lee 1998 ]的完整描述.)。然而,我们所用到的所有统一资源定位器有一种通用格式:
计划对应于被用来存取资源的协议。这样,对于HTTP,它将是 http ,对于FTP,它将是ftp,等等。主机和端口域的指定服务器与在端口附近区域的.The 联接[],意味它是可选的。协议通常可以定义一个缺省值,但是允许存取在任何端口上。例如, HTTP 的缺省端口是 80 。
URL的路径区段提供指示的服务者上的资源的名字(位置)。
路径典型地好像UNIX文件名(/foo/酒吧/baz)一样。在理论上,实际上路径好像一个文件名意味着各种各样的部分相当于目录,文件,等等.但实际上经常如此,在这种情况下服务器将提供相当于资源物件的文件的情况。
最后,一个URL最后可能有问题,由一个发出?.查询希望是详细的资源并且是“由资源解释了的”。
当资源不是一份文件时询问最频繁地被使用但是更合适一个力学产生问题的资源的程序。
在如此的情况中,质问部分被用来给节目提供输入。
例如,1dp:URL相当于一个条目(轻量级录存取协议)目录服务者。
质问信息能被用来鉴别顾客感兴趣的属性,质问的范围,除其它的质问参数之外。
一个例子
一个简单的URL如图9.3所示;
http://www.example.com/local/foo.html
URI可能如下所示描述资源:使用HTTP,与机器ww.example.com在接口80上联接.请求resource/local/foo.html;
可能有一相对的URL,例如/local/foo.html。在这种情况下,计划和主人被假定与习惯于取包含URL的文件相同。
对URLs的URIs
HTTP请求行包含一个URI。
我们刚刚已经看了什么是URLs,但是什么是URI?URI代表统一的资源标识符。
URIs是URIs的一个超级设置。
URI是一个简单的涉及给定资源的短字符串。
URL是详细包含关于怎么获取资源的说明的一个URI。
URIs可能能特别地鉴别资源但是不提供怎么获取它的说明。
这种级别的URIs被称为统一的资源名字(URN)。
总的来说,可能你看到的任何的URI都是URL,因为他们描述怎么使用HTTP,FTP,等等.,获取资源.然而,HTTP请求行可能包含一个non-URL URI因此RFC2616使用URI术语,在这一节的其余部分当谈到在HTTP请求和URL在链接出现的标志我们将使用URI术语。
寻找更多的有关这个话题的信息。