首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较RFC 5246 SessionID重用与RFC 5077会话恢复?

比较RFC 5246 SessionID重用与RFC 5077会话恢复?
EN

Cryptography用户
提问于 2014-03-25 01:55:02
回答 2查看 2.7K关注 0票数 8

您能帮助我理解RFC 5246 SessionID重用和RFC 5077会话恢复之间的算法和实际差异吗?

这两种方法似乎都是在没有服务器证书交换的情况下确定第二个TLS会话的方法,利用完整的证书交换和验证以前的单独的TLS会话。

在读取了RFC 5246§7.4.1.2RFC 5077§3之后,RFC 5077似乎将一个令牌交给使用服务器密钥加密的会话设置信息的客户端,这样客户端可以将令牌发回服务器,并快捷地处理会话设置参数的协商和协议。另一方面,RFC 5246只提供对双方共享的现有连接的引用,并允许它们重用这些会话参数,这是基于双方仍将它们保存在原始会话的记忆中。

这是正确的理论把握吗?

就“足够接近政府工作”而言,我对这两种不同类型的连接的实际使用情况很感兴趣:

  1. RFC 5246 SessionID好吗?
  • 只有原来的会话还在活动吗?
  • 只要有一个连续的会话链使用相同的SessionID?
  • 在所有这样的会话结束之后,但在SessionID从活动内存中删除之前,有一个松散定义的时间吗?
  1. 是否恢复RFC 5077会话?
  • 常用的代替RFC 5246 SessionID?
  • 通常用于更广泛分离的连接,即RFC 5246?
  • 最常用的吗?
  1. 两者是否有如下所述的不同之处:
  • RFC 5077令牌创建(服务器发送到客户端)完全包含在加密的数据包中,例如握手之后?
  • RFC 5246会话交换完全未加密,例如,在握手的早期(ClientHello,ServerHello)部分?

任何你能分享的洞察力都很感激!

EN

回答 2

Cryptography用户

回答已采纳

发布于 2014-03-27 09:29:36

更新:下面的内容通过TLS 1.2有效。2018年,TLS1.3从根本上改变了这一点;旧的恢复机制和旧的可选票务机制都消失了。相反,可以选择两端存储一个秘密加一些属性(比如旧的恢复),但是这个存储的秘密现在是从前一会话派生的“预共享密钥”( PSK ),因此存储的PSK的折衷不会影响前一会话。服务器使用为5077定义的“新建票证”消息类型,但现在它只包含一个标识符,而不是实际的票证。新会话可以直接使用此PSK作为“输入”秘密,也可以使用DHE或ECDHE对新的密钥交换进行身份验证,就像手动配置的PSK可以使用( 1.2和更低)一样--但手动PSK一直是,而且我预计仍然会非常罕见。此外,重新协商现在已经结束了--尽管添加了一些特定的操作来做客户端-auth和更新工作(对称)键--所以会话和连接现在基本上是一样的。

是的,你有基本的想法。会话id信息存储(缓存)在两端;票证只存储在客户端,由服务器加密。两者都重用SSL/TLS中的“密钥交换”,它实际上是与身份验证相结合的密钥交换;虽然身份验证可以是双向的(服务器和客户端),因此也是证书的“交换”,但它通常是服务器专用的。

要弄清楚细节,您需要区分会话和连接。SSL/TLS会话基本上是完全握手的结果:协商后的版本、加密套件、(最重要的是)主秘密,以及其他一些比特。这个加号是正确进行加密和HMAC所需的数据,或者在TLSv1.2中可以选择“认证加密”模式GCM或CCM。连接与TCP连接同时进行,并以初始握手开始,以便创建和使用新会话,或恢复现有会话。恢复可以用于某个窗口内不同时间的连接,也可以同时使用多个连接--如果不是所有浏览器,大多数浏览器都会打开4到10个并行连接来下载大多数浏览器上使用的10或100秒的资源(?)网页现在。使用重新协商在一个连接上有多个会话也是可能的,但比较少见,通常是通过不同的身份验证或对一个长期存在的连接进行验证。(好吧,除非服务器禁止重新协商,作为对MitM前缀攻击的笨拙防御,而正确的修复方法是rfc 5746。)

自1996年SSLv3以来,会话id一直在基本协议中;自2006年以来,票据是一个可选的扩展。虽然会话id在协议中,但您不必完全实现它--服务器总是可以返回一个空的会话id,而客户机总是可以“忘记”它接收到的任何会话id。对于拥有大量客户的服务器--比如google、yahoo、twitter、facebook --它们需要节省大量会话,并在服务器“农场”中的多台机器上分发/同步会话(可以解决问题,但如果不需要更简单的话),票证主要是有用的。

因此,根据你的具体情况:

  1. 只要两个端点选择保存它并有空间,会话id就是好的。通常这是分钟--也许最多一小时,但如果两个端点都支持这一点,则可能会更多。在我看过的实现中,每个应用程序都可以配置它。它很好地失败了--如果客户端放弃了服务器的会话,并将ClientHello发送为空,服务器只会创建一个新会话,如果仍然保存旧会话,服务器就会丢弃旧会话;如果客户端已经(和请求)丢弃了会话服务器,服务器将强制创建一个新会话,而客户端会丢弃其旧会话。
  2. 当我看过的时候,我只在几个大容量的站点(和我的OpenSSL测试平台)上看到过提供票证(如果客户端提供支持的话),但是我没有声称做过任何类似于彻底调查的事情,我也没有看到任何出版物。如5077所述,如果确实使用票证,则实际上忽略了该会话的会话id。服务器允许票证有效的时间当然比它在其缓存(可能有限且拥挤)中保留会话id的时间长得多,但我没有数据。
  3. 除了特定的元素外,初始握手在ChangeCipherSpec之前总是未加密并完成。特别是对于RSA密钥交换,客户端公钥将主密钥加密到服务器端.(对于DH*和ECDH*,公钥不需要加密,但仍然会产生秘密协议。)如果使用票证,则由服务器对其本身进行加密。如果您确实使用重新协商,整个握手是(超级)加密的,即使它通常不需要,提供了一种(笨拙的)方式来获得该功能。
票数 9
EN

Cryptography用户

发布于 2020-11-24 21:21:08

正如dave_thompson_085提到的,RFC 5246 (TLS 1.2)和RFC 5077 (会话恢复)都被淘汰了-- RFC 8446。虽然几乎是2013年和TLS 1.2仍然占主导地位的版本。和以前的版本一样,TLS 1.2 (RFC 5246)需要“完全握手”(serverCertificates、changeCipherSpec等),而TLS SessionTicket扩展(RFC 5077)允许设计人员使用缓存的服务器票绕过“完全握手”。请注意,TLS SessionTicket扩展是由大多数现代的启用TLS的浏览器和服务器“强制执行”的,默认情况下是启用的。此扩展节省了处理和发送重证书链所需的大量时间,通过网络和hmac对称密钥块进行加密,这些密钥块由核心TLS RFC定义。

票数 0
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/15209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档