在HTTP/1.1中升级到TLS( 二 )


剩余部分 。后者希望做成完全透明 。例如,在TLS的记录标记或认证和HTTP/1.1的大块编
码或认证之间没有关联 。
客房和服务器都能使用HTTP/1.1[1]升级机制(14.42节)来指示TLS安全连接是必要
的 。本备忘录定义了“TLS/1.0”升级记号和一个新的HTTP状态码,“426-需要升级” 。
小节3和小节4描述了直接相连的客房和服务器的操作 。如小节5中阐述的,在实施任
何操作之前中间代理必须建立端到端的隧道 。
2.1.相关术语
在本文中的要害字“必须”,“必须不”,“要求”,“应该”,“不应该”和“可
能”的解释见[RFC2119] 。
3.客户请求升级到TLS之上的HTTP
当客户发送一个有包含记号“TLS/1.0”的升级包头的HTTP/1.1请求,它表示请
求服务器在转换到TLS/1.0之后完成当前的HTTP/1.1请求 。
3.1.可选的升级
当一个不安全的响应可接受时,一个客户在任何明文的HTTP请求期间可以要求转
换到安全的操作流程:
GEThttp://example.bank.com/acct_stat.Html?749394889300HTTP/1.1
Host:example.bank.com
Upgrade:TLS/1.0
Connection:Upgrade
在这个例子中,服务器可以对明文的HTTP请求作正常响应或是转换到安全的操作中
(细节见下一小节) 。
注重在HTTP/1.1[1]中定义“无论在HTTP/1.1消息中何时出现升级关健字,该关健字
必须出现在一个连接头的域中(14.10小节)” 。
3.2.强制升级
若无法接受一个不安全的响应,客户必须首先发送一个选项请求来完成到TLS/1.0的
切换(若可能的话) 。
OPTIONS*HTTP/1.1
Host:example.bank.com
Upgrade:TLS/1.0
Connection:Upgrade
3.3服务器对升级请求的确认
如HTTP/1.1[1]中定义的,假如服务器预备初始化TLS握手,必须发送中间的“101转
换协议”且必须包括一个定义它要转换到的协议栈记号的升级响应头:
HTTP/1.1101SwitchingProtocols
Upgrade:TLS/1.0,HTTP/1.1
Connection:Upgrade
注重在101转换协议升级头中列出的协议记号定义了一个自底向上的栈 。
如HTTP/1.1[1],10.1.2小节中定义的:“服务器将在收到终止101响应的空行后立
即将协议转换至响应的升级头域定义的协议 。
一旦TLS握手成功完成,服务器必须继续对原来请求的应答 。任何TLS握手失败必须
通过TLS错误告警规范导致连接中断,。
4服务器请求升级到TLS之上的HTTP
升级响应头域宣告一个服务器可能接受的协议升级 。和“426升级请求”状态码相结
合,服务器能发送一个客户必须接受的协议升级来完成请求 。
4.1选项通知
如在HTTP/1.1[1]中定义的,服务器可以在任何除了101或426的响应中包含一个升级
头表示转换到任何列出的协议(组合) 。
4.1强制通知
服务器可以使用“426需要升级”表示没有TLS无法完成客户请求,这个响应必须包含
一个定义了需要的TLS版本记号的升级头域 。
HTTP/1.1426UpgradeRequired
Upgrade:TLS/1.0,HTTP/1.1
Connection:Upgrade
服务器应该在426响应中包含一个消息体以一种可读形式指示错误原因和描述另外对用
户可用的路线 。
注重,即使客户愿意使用TLS,它出必须使用在第3节中的操作来进行;在426响应之
后TLS握手不能马上开始 。
5通过代理的升级
作为一个逐跳的头部,HTTP的每一对参加者间要协商升级 。若一个用户代理发送一个
带升级头的请求给代理,它要求的是在自己和代理之间的改变而不是端与端之间的改变 。
因为TLS非凡要求端到端的连接提供认证并防御中间人攻击,本备忘录定义了CONNECT

推荐阅读