您能帮助我理解RFC 5246 SessionID重用和RFC 5077会话恢复之间的算法和实际差异吗?
这两种方法似乎都是在没有服务器证书交换的情况下确定第二个TLS会话的方法,利用完整的证书交换和验证以前的单独的TLS会话。
在读取了RFC 5246§7.4.1.2和RFC 5077§3之后,RFC 5077似乎将一个令牌交给使用服务器密钥加密的会话设置信息的客户端,这样客户端可以将令牌发回服务器,并快捷地处理会话设置参数的协商和协议。另一方面,RFC 5246只提供对双方共享的现有连接的引用,并允许它们重用这些会话参数,这是基于双方仍将它们保存在原始会话的记忆中。
这是正确的理论把握吗?
就“足够接近政府工作”而言,我对这两种不同类型的连接的实际使用情况很感兴趣:
任何你能分享的洞察力都很感激!
发布于 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 --它们需要节省大量会话,并在服务器“农场”中的多台机器上分发/同步会话(可以解决问题,但如果不需要更简单的话),票证主要是有用的。
因此,根据你的具体情况:
发布于 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定义。
https://crypto.stackexchange.com/questions/15209
复制相似问题