1.介绍
HTTP[RFC2616]最初是在INTERNET上不用密码的应用。但随着HTTP的敏感性应用日益增加,对安全性的要求也随之增加。SSL及其后继TLS[RFC2246]提供了面向通道的安全性。本文介绍怎样在TLS之上应用HTTP。
相关术语
在本文中的关键字“必须”,“必须不”,“要求”,“应该”,“不应该”和“可能”的解释见[RFC2119]。
2. TLS之上的HTTP
从概念上讲,HTTP/TLS非常简单。简单地在TLS上应用HTTP,如同在TCP上应用HTTP一样。
2.1 初始化连接
作为HTTP客户的代理同时也应作为TLS的客户。它应该向服务器的适当端口发起一个连接,然后发送TLS ClientHello来开始TLS握手。当TLS握手完成,客户可以初始化第一个HTTP请求。所有的HTTP数据必须作为TLS的“应用数据”发送。正常的HTTP行为,包括保持连接,应当被遵守。
2.2 关闭连接
TLS提供了安全关闭连接的机制。当收到一个有效的关闭警告时,实现上必须保证在这个连接上不再接收任何数据。TLS的实现在关闭连接之前必须发起交换关闭请求。TLS实现可能在发送关闭请求后,不等待对方发送关闭请求即关闭该连接,产生一个“不完全的关闭”。注意:这样的实现可能选择重用该对话。这只应在应用了解(典型的是通过检测HTTP的消息边界)它已收到所有它关心的数据的情况下进行。
如[RFC2246]中所定义的,任何未接收一个有效的关闭警告(一个“未成熟关闭”)即接到一个连接关闭必须不重用该对话。注意:一个未成熟请求并不质疑数据已被安全地接收,而仅意味着接下来数据可能被截掉。由于TLS并不知道HTTP的请求/响应边界,为了解数据截断是发生在消息内还是在消息之间,有必要检查HTTP数据本身(即Content-Length头)。
2.2.1 客户行为
由于HTTP使用连接关闭表示服务器数据的终止,客户端实现上对任何未成熟的关闭要作为错误对待,对收到的数据认为有可能被截断。在某些情况下HTTP协议允许客户知道截断是否发生,这样如果客户收到了完整的应答,则在遵循“严出松入[RFC1958]”的原则下可容忍这类错误,经常数据截断不体现在HTTP协议数据中;有两种情况特别值得注意:
一个无Content-Length头的HTTP响应。在这种情况下数据长度由连接关闭请求通知,我们无法区分由服务器产生的未成熟关闭请求及由网络攻击者伪造的关闭请求。
一个带有有效Content-Length头的HTTP响应在所有数据被读取完之前关闭。由于TLS并不提供面向文档的保护,所以无法知道是服务器对Content-Length计算错误还是攻击者已截断连接。
以上规则有一个例外。当客户遇到一个未成熟关闭时,客户把所有已接收到的数据同Content-Length头指定的一样多的请求视为已完成。
客户检测到一个未完成关闭时应予以有序恢复,它可能恢复一个以这种方式关闭的TLS对话。
客户在关闭连接前必须发送关闭警告。未准备接收任何数据的客户可能选择不等待服务器的关闭警告而直接关闭连接,这样在服务器端产生一个不完全的关闭。
2.2.2 服务器行为
RFC2616允许HTTP客户在任何时候关闭连接,并要求服务器有序地恢复它。特别是,服务器应准备接收来自客户的不完全关闭,因为客户往往能够判断服务器数据的结束。服务器应乐于恢复以这种方式关闭的TLS对话。
实现上注意:在不使用永久连接的HTTP实现中,服务器一般期望能通过关闭连接通知数据的结束。但是,当Content-Length被使用时,客户可能早已发送了关闭警告并断开了连接。
服务器必须在关闭连接前试图发起同客户交换关闭警告。服务器可能在发送关闭警告后关闭连接,从而形成了客户端的不完全关闭。
2.3端口号
HTTP服务器期望最先从客户收到的数据是Request-Line production。TLS服务器期望最先收到的数据是ClientHello。因此,一般做法是在一个单独的端口上运行HTTP/TLS,以区分是在使用哪种协议。当在TCP/IP连接上运行HTTP/TLS时,缺省端口是443。这并不排除HTTP/TLS运行在其它传输上。TLS只假设有可靠的、面向连接的数据流。
2.4 URI格式
HTTP/TLS和HTTP的URI不同,使用协议描述符https而不是http。使用HTTP/TLS的一个URI例子是:
https://www.example.com/~smith/home.html
3 端标识
3.1 服务器身份
通常,解析一个URI产生HTTP/TLS请求。结果客户得到服务器的主机名。若主机名可用,为防止有人在中间攻击,客户必须把它同服务器证书信息中的服务器的身份号比较检查。
若客户有相关服务器标志的外部信息,主机名检查可以忽略。(例如:客户可能连接到一个主机名和IP地址都是动态的服务器上,但客户了解服务器的证书信息。)在这种情况下,为防止有人攻击,尽可能缩小可接受证书的范围就很重要。在特殊情况下,客户简单地忽略服务器的身份是可以的,但必须意识到连接对攻击是完全敞开的。
若dNSName类型的subjectAltName扩展存在,则必须被用作身份标识。否则,在证书的Subject字段中必须使用Common Name字段。虽然使用Common Name是通常的做法,但不受赞成,而Certification Authorities被鼓励使用dNSName。
使用[RFC2459]中的匹配规则进行匹配。若在证书中给定类型的身份标识超过一个(也就是,超过一个dNSName和集合中的相匹配),名字可以包括通配符*表示和单个域名或其中的一段相匹配。例如:*.a.com和foo.a.com匹配但和bar.foo.a.com不匹配。f*.com和foo.com匹配但和bar.com不匹配。
在某些情况下,URI定义的不是主机名而是IP地址。在这种情况下,证书中必须有iPAddress subjectAltName字段且必须精确匹配在URI中的IP地址。
若主机名和证书中的标识不相符,面向用户的客户端必须或者通知用户(客户端可以给用户机会来继续连接)或终止连接并报证书错。自动客户端必须将错误记录在适当的审计日志中(若有的话)并应该终止连接(带一证书错)。自动客户端可以提供选项禁止这种检查,但必须提供选项使能它。
注意,在很多情况下URI本身是从不可信任的源得到的。以上描述的检查并未提供对危害源的攻击的保护。例如,若URI是从一个未采用HTTP/TLS的HTML页面得到的,某个人可能已在中间已替换了URI。为防止这种攻击,用户应仔细检查服务器提供的证书是否是期望的。
3.2 客户标识
典型情况下,服务器并不知道客户的标识是什么也就无法检查(除非有合适的CA证书)。若服务器知道的话(通常是在HTTP和TLS之外的源得到的),它应该象上面描述的那样检查。
《RFC2818-TLS之上的HTTP.doc》
相关推荐
TLS是网络安全的重要组成部分,它在HTTP之上构建了HTTPS,确保了数据的加密传输,防止数据被窃取或篡改。 **文件名解析:** 1. **removejunk.bat** - 这可能是一个批处理文件,用于清理或删除不必要的文件,可能...
2. HTTPS:HTTPS是一种安全的HTTP协议,它使用SSL/TLS协议进行数据传输,可以保护数据的隐私性和完整性。在ESP32中实现HTTPS通信,需要配置SSL上下文并建立安全连接,通常涉及证书的验证。 3. mbedtls:mbedtls是一...
它们主要在TCP/IP协议之上,为上层应用提供安全服务,比如HTTPS、FTP、SMTP等。SSL/TLS协议的目的是防止数据在传输过程中被窃取、篡改,同时提供身份认证机制,以确认通信双方的身份。 SSL/TLS协议分为两层: 1. ...
相比之下,HTTPS(Hypertext Transfer Protocol Secure)则是SSL协议的一种应用形式,它主要用于保护HTTP协议的数据传输,通常使用443端口。此外,SSL还可用于加密电子邮件等其他类型的数据传输,如POP3(995端口)...
TLS协议建立在TCP/IP协议基础之上,旨在为网络通信提供加密和数据完整性。TLS的主要工作原理是在通信双方进行数据传输之前,通过一系列的握手过程协商加密算法和加密密钥,确保后续通信的安全。TLS协议在握手阶段...
Indy 10的强大之处在于其灵活性和可扩展性,使得开发者可以轻松地构建网络应用,包括支持高级安全协议如TLS 1.2。 TLS(Transport Layer Security)1.2是目前广泛使用的安全协议版本,它在SSLv3和TLS 1.0之后发布,...
它在HTTP之上提供了HTTPS协议,确保了数据在传输过程中的加密和完整性,防止数据被窃取或篡改。TLS的主要目标是通过加密技术和身份认证机制,保护网络通信不被第三方监听或干扰。 在“tls-main.zip”这个压缩包中,...
GNU TLS 提供了一系列指南,说明如何将 TLS 集成到 HTTP、FTP 等常见应用协议中。 #### 七、SSL 2 和旧版协议 - **兼容性问题**:虽然 TLS 是当前推荐的安全标准,但仍有部分老旧系统可能仅支持 SSL 2 或其他早期...
4. **SSL/TLS终端**:Nginx支持SSL和TLS协议,可以作为SSL终端,为HTTP流量提供加密。 5. **模块化设计**:Nginx具有模块化的设计,可以通过添加第三方模块来扩展其功能。 6. **缓存机制**:Nginx支持HTTP缓存,可以...
TLS协议位于传输层之上、应用层之下,其核心目标是确保数据传输的安全性。该协议主要包括以下几个子协议: - **握手协议**:用于客户端和服务端之间的身份验证和密钥交换。 - **记录协议**:负责加密和解密实际的...
它位于TCP/IP协议之上,提供了数据加密、认证及完整性保护等功能。 ##### 2.2 SSL/TLS协议的历史 - **SSL**:由Netscape公司在1994年开发,最初版本为SSL 1.0,但由于存在安全漏洞并未发布。后续版本SSL 2.0和SSL ...
TLS 是互联网上广泛采用的一种安全协议,用于保障网络通信的隐私与完整性。Forge.dart 提供的 TLS 功能可以帮助开发者创建安全的 HTTPS 连接,验证服务器的身份,防止中间人攻击。此外,它还支持自定义证书和私钥,...
在实验中,DRLgencert针对GnuTLS、MatrixSSL、SSLMbed、TLSNss、OpenSSL和WolfSSL等六个流行的SSL/TLS实现进行了测试,生成了大量新的证书,并通过差分测试发现了23项证书验证代码实现的不当之处。这些发现的缺陷...
其次,`zio-tls-http`构建于Scala的ZIO库之上。ZIO(ZIO Effect)是一个强大的类型安全的异步编程库,它将副作用封装为效果类型,提供了一种声明式的方式来编写并发和异步代码,同时确保资源的正确管理。这使得...
SSL/TLS证书管理之所以复杂,是因为涉及到以下几个方面的问题: 1. 证书更新频率高:快速变更的网络环境要求证书的更新周期缩短,管理的频率随之增加。 2. 多服务器环境下的工作量大:企业往往拥有多个服务器,每个...
SSL 在 TCP 之上建立了一个加密通道,通过这一层的数据经过了加密,因此达到保密的效果。 三、加密方面的基础知识 加密一般分为三类,对称加密,非对称加密及单向散列函数。 对称加密:又分分组密码和序列密码。...
它在HTTP之上创建一个安全的套接字层,形成了HTTPS协议,用于保护用户的隐私信息,如密码、信用卡号等。 2. **工作流程**:TLS通过握手过程建立安全连接,包括客户端发起连接请求、服务器回应、交换证书、协商加密...
它们都位于TCP/IP协议栈中的传输层之上,用于保护HTTP、FTP、SMTP、IMAP和其他互联网协议的数据。SSL和TLS通过使用对称加密和非对称加密的结合,以及使用数字证书,来为互联网通信提供数据加密、身份验证和完整性...