RFC2818--HTTPS/TLS 翻译

rfc2818原文原文连接

翻译


RFC818文档中对HTTPS的描述如下:

连接初始化--

运行HTTP的客户端也是运行TLS的客户端。这个客户端需要在合适的端口向服务器发送一个连接请求,然后发送TLS clienthello 来开始一个TLS握手。当TLS握手结束后,客户端会发起首个HTTP请求。所有的HTTP数据必须以TLS “applicationdata”的形式发送。正常的HTTP行为,包含保持连接的行为,也要这么做。(以TLS “application data“的形式发送)。

 

文档中还描述了HTTPS连接关闭时客户端和服务器端的行为、端口号、URI的格式,端系统认证(包含服务器的认证、客户端的认证)

 

连接的关闭—

TLS 提供了安全连接关闭的机制。当一个有效的关闭提醒被收到之后,可以如下来实现—这条连接上将不会有进一步的信息被接收。TLS的实现要求,在关闭连接之前连接双方必须要交换关闭提醒(closure alerts)。在TLS的实现中,一方可以在发送了关闭提醒之后直接关闭连接而不等待对方的关闭提醒发送,从而产生一个“不完全关闭“。应当注意,这样实现可以重用session(连接)。这样实现要求用户程序知道自己所需的信息已经全被收到(典型的如,通过检查HTTP消息的边界)。

在rfc2246中特别指出,任何在关闭连接之前没有收到有效关闭提醒(valid closure alert)的实现方式,禁止重用连接。提前关闭不会对已经传输的数据产生安全问题,但是意味着随后的数据也许会被截断。因为TLS是不检查HTTP请求/应答报文的边界的。所以检查HTTP数据是在在一个报文段之内被截断还是在报文段之间被截断是很重要的(通常是通过content-length头部来检查)。

       客户端行为—

       因为HTTP使用连接关闭来标志服务器端数据的传输结束,所以客户端必须将任何连接提前关闭看成是错误并且认为已收到的数据是被截断的、不完整的。然而在有些情况下,HTTP洗液允许客户端检查是否发生了截断,容忍传输完成情况下的连接提前关闭的错误。

       两种情况要特别注意:

       HTTP响应报文没有Content-Length 头部。在这种情况下(容忍提前关闭连接的错误),数据长度有连接中断来决定,此时如果攻击者发来消息,客户端并不知道。

       包含有效长度的HTTP响应响应报文在所有数据被读进之前送到且关闭连接。无法区分是服务器计算错误还是连接被劫持中断。

对于上面的rule有个例外。当遇到了提前终止连接,客户端应当将其看成所有请求已经发送,且接收了尽可能多的数据。

       客户端检查一个不完整的关闭,并应该优雅地(gracefully)恢复。它要重新开始被意外中断的对话。

       客户端必须在关闭连接之前发送一个关闭提醒。不准备接收更多的数据的客户端可以选择不等待服务端发送关闭提醒,而是可以直接关闭连接。从而产生一个不完整的关闭(客户端关闭了连接,而服务端依旧单方面维护着连接)。

       服务器端行为—

       RFC2616允许HTTP客户端在任何时候关闭连接,要求服务器端优雅地(gracefully)恢复连接。特别地,服务器端应该准备遇到客户端意外的终端(客户端不等待服务端发关闭提醒就关闭连接)。客户端可以决定服务器什么时候终止数据传输。服务器端应当时刻准备恢复被客户端意外关闭的的对话(连接)。

       实现的note:在HTTP实现中并不使用持续连接,服务端应当能够通过关闭连接来提示数据的终止。当发送content-length,客户端也许已经发送了关闭提醒且关闭了连接。

       服务器必须要在关闭连接之前提起和客户端交换关闭提醒。服务端也可以(MAY)在发完关闭提醒之后关闭连接,从而在客户端留下了单方面的连接。

 

端口号—

HTTP服务器期望收到来自客户端的首个数据是Request-Line production。然而,TLS 服务器(HTTPS 服务器)期望收到来自客户端的首个数据是ClientHello。从概念上说,常见的做法是将HTTPS/TLS运行在不同的端口上,以便于区分不同的协议。当HTTPS/TLS 被运行在TCP/IP连接上,默认端口好是443. 当然,HTTPS/TLS也可以运行在其他的端口号上。TLS只是假设在此端口上有一个可靠的面向连接的数据流。

URI Format—

HTTPS/TLS 和HTTPSURIs不同之处在于将HTTP的URI中的http改成了https

端系统的认证—

       服务器的认证—

       HTTPS/TLS请求通过解引用URI来产生。因此,客户端是知道服务器的hostname的。如果客户端知道服务器的hostname,客户端必须在服务器的证书信息里面检查当前获得的服务器的身份,来防止中间人攻击。

       如果客户端有想要访问的服务器有额外的信息,检查hostname的工作可以忽略(例如,访问的服务器的地址和hostname是动态变化的,但是客户端知道服务器早晚会提供证书的)。在这种情况下,缩小可接受证书的范围是很重要的,以此防止中间人攻击。特殊情况下,客户端可以忽略服务器身份,但是这样做会让连接面临被攻击的风险。

       如果hostname和证书中的身份信息不匹配,客户端需要通知客户是否继续或者关闭连接返回一个badcertificates error。默认处理的客户端需要将错误记录在audit 日志上并应该关掉连接返回错误。

       注意到,很多情况下URI本身来自不可信的来源,以上的检查无法提供避免攻击的保护。如网页中的连接会被替换为不使用HTTPS/TLS,点击时会受到中间人的攻击。

       客户端认证—

       典型情况,服务器对客户端的身份信息没有额外的要求,所以检验身份是不必要的。

 


包含了1-3093的rfc中文翻译。 组织:中国互动出版网(http://www.china-pub.com/) RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm) E-mail:ouyang@china-pub.com 译者: 李超(licc_li licc_li@sina.com) 译文发布时间:2001-5-23 版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须 保留本文档的翻译及版权信息。 Network Working Group S. Casner Request for Comments: 2508 Cisco Systems Category: Standards Track V. Jacobson Cisco Systems February 1999 低速串行链路下IP/UDP/RTP数据包头的压缩 (RFC 2508 Compressing IP/UDP/RTP Headers for Low-Speed Serial Links) 本备忘录的状态 本文档讲述了一种Internet社区的Internet标准跟踪协议,它需要进一步进行讨论和建议以 得到改进。请参考最新版的“Internet正式协议标准” (STD1)来获得本协议的标准化程度 和状态。本备忘录的发布不受任何限制。 版权声明 Copyright (C) The Internet Society (1999). All Rights Reserved. 摘要 本文描述了一种对IP/UDP/RTP数据报头进行压缩的方法,它可以降低在低速串行链路上 的网络开销。多数情况下,三个头可压缩到2-4字节。 请赐教并将您的建议发送到工作组邮件列表rem-conf@es.net或直接给作者。 本文中的关键字“必须”,“必须不”,“要求的”,“应该”,“不应该”,“会”,“不会”, “建议”,“或许”,“可选的”在 RFC 2119 中解释。 目录 本备忘录的状态 1 版权声明 1 摘要 1 1. 介绍 2 2. 设想和折中 2 2.1. 单工与全双工 3 2.2. 分片与分层 3 3.压缩算法 3 3.1.基本概念 3 3.2 RTP数据包头压缩 4 3.3协议 5 3.4. RTCP控制包压缩 12 3.5.非RTP UDP包压缩 13 4.与分片的交互 13 5.压缩协商 13 6.致谢 14 7.参考文献 14 8. 安全性考虑 14 9.作者地址 15 10.版权声明 15 1. 介绍 随着实时传输协议(RTP)成为正式的RFC[1]发行,人们对于利用RTP实现不同的网络音视 频应用程序间互操作的兴趣也日益增长。然而,我们也注意到,当使用低速链路如14.4Kb/s 或28.8Kb/s拨号时,12字节的RTP头对于仅有20字节的负载而言开销实在太大。(为了减少 头占用的字节,一些已经在类似环境下存在的应用通常使用自定义的协议,而这样做的代价 就是削减了RTP相关的功能。) 事实上,正如在TCP中已经取得巨大成功,也可通过压缩技术来令IP/UDP/RTP包头变小。 这时,压缩可以针对于RTP头(在端到端应用中),或者IP,UDP,RTP的组合头(在Link-by-Link 应用中)。将40字节的组合头一起进行压缩比仅压缩12字节的RTP头更具实际效果,因为两 种情况下的结果大小均为约2-4字节。同时,由于延迟和丢失率都很低,对Link-by-Link应 用进行压缩性能上也更好。因此我们在这里定义的方法就是针对Link-by-link应用下 IP/UDP/RTP头进行组合压缩。 本文定义的压缩方案可应用于IPv4包、IPv6包或封装了多个IP头的包。为了能同时在IPv6 和IPv4下使用,这里定义的IP/UDP/RTP压缩符合[3]中规定的通用压缩框架。该框架把TCP 和非TCP定义为IP之上的两个传输类。本规范将IP/UDP/TCP从非TCP类中抽取出来创建为第三 类。 2. 设想和折中 本压缩方案的目标是,在不发送UDP校验和的情况下,将大多数包的IP/UDP/RTP头压缩到 2个字节,在带校验和时则压缩到4个字节。这一方案的提出主要是受使用14.4kb/s和 28.8kb/s拨号调制解调器发送音视频时遇到的相关问题所引起。这些链路提供全双工通信, 所以协议利用了这点,尽管协议在用于单工链路时可能性能会有所下降。该方案在本地链路 上往返时间(RTT)很低,从而实现性能最高。 为了降低低速链路下的延迟,除了在第四节中确定了分片和压缩中可能使用的一些交互 外,本规范并未提出大型数据包的分片和占先策略。分片方案可能会单独定义并与本压缩方 案配合使用。 应该注意到,实现的简单性是评价压缩方案的一个重要因素。通信服务器可能要用一个 处理器支持多达100个拨号调制解调器的数据压缩。因此,如下的考虑都是比较恰当的,即 在设计阶段为了实现简单而牺牲一些通用性,或者在设计上灵活通用但为了简单性可对设计 进行子集化。通过在压缩和解压器之间用更复杂的模型通信改变头字段还可以达成更好的压 缩效果,但其复杂性却是没必要的。下一节将讨论这里列出的一些折中方案。 2.1. 单工与全双工 在没有其它限制的情况下,单工链路上的压缩方案应成为首选。但为防止错误发生,单 工链路上的操作需要用一个含有压缩状态信息的未压缩包头进行周期性的刷新。如果明显的 错误信号可以返回,则恢复延迟也可以实质性地缩短,无错误情况的开销也会降低。为了实 现这些性能的优化,本规范包括了一个可逆向发送的明显错误指示。 在单工链路中,可以使用周期性刷新来取代。解压器一旦侦测到错误存在于某个特定的 流中,它可以简单地放弃该流中所有的包直到接收到一个未压缩的头为止,然后继续解压。 其致命弱点在于可能要在恢复解压前要放弃大量的包。周期性刷新的方法在[3]的3.3节中进 行描述,它应用于单工链路的IP/UDP/RTP压缩,或者应用于其它非TCP包流的高延迟链路。 2.2. 分片与分层 在低速链路上发送大型数据包所需时间而导致的延迟对于单向音频应用不算什么大问 题,因为接收方可以适应延迟变动。但对于交互式的交谈,最小端到端延迟是非常关键的。 对大的,非实时数据包进行分片以允许小的实时包在分片间隙进行传送可以降低这种延迟。 本规范只处理压缩,并且假定,如果包括分片,也将被处理为一个单独层。将分片和压 缩按这种方式进行集成并不可取,因为一旦如此,在没有必要或不可能进行分片的情况下, 连压缩都不能使用。类似地,应该避免预留协议的任何需求。除了要求链路层提供一些包类 型码,一个包长度指示和良好的错误检测外,该压缩方案可独立于任何其它机制而应用在本 地链路的两端。 相反,单独对IP/UDP和RTP层进行压缩丢失了太多的压缩效率,这些效率可以通过将它们 一起对待而得到。由于相同的函数可以应用于所有层,实现跨越这些协议层边界的方案是恰 当的。 3.压缩算法 本文定义的压缩算法主要利用了RFC 1144[2]描述的TCP/IP头压缩的设计。读者可以参考 该RFC获取更多的关于对包头进行压缩的基本动机和通用原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值