SSL 握手后,客户端的会话密钥存储在哪里?

Posted

技术标签:

【中文标题】SSL 握手后,客户端的会话密钥存储在哪里?【英文标题】:Where is the session key stored on the client side after SSL handshake? 【发布时间】:2016-06-07 05:54:56 【问题描述】:

我对通过 cookie/会话进行安全连接的想法不熟悉,所以我正在做一些研究,并且遇到了 SSL 握手。我明白了:

    浏览器向服务器发送初始请求 服务器向浏览器发送证书(包含公钥 n) 浏览器选择一个随机的 x(我不知道这是怎么做到的),并计算 (x^65537 mod n),并将这个计算值发送回服务器 服务器使用它们的两个私有(通常是素数)密钥解密这个计算值 服务器和客户端现在有一个只有双方知道的“会话密钥”。他们现在使用此会话密钥来加密属于此会话的所有消息。

我发现了一个问题Here 谈论此 SSL 对称密钥(会话密钥)在服务器端的存储位置。

然而,在客户端,我尝试打开开发者控制台并寻找它,但我找不到它。这是有道理的,显然我应该无法轻易找到它。此会话密钥存储在客户端的什么位置?我的会话密钥是否可能在 XSS 攻击期间被盗?

【问题讨论】:

第 3 步和第 4 步不正确。密钥协商协议在 RC 2246 和后续版本中定义,与您在此处描述的不同。互联网上有大量来自其他来源的关于此的 BS。不要相信他们。甚至不要阅读它们。 【参考方案1】:

浏览器会将会话密钥存储在内存中。

它们在任何 XSS 攻击中都无法检索,因为它们没有存储在 DOM 中。

任何 XSS 攻击也可能不需要会话密钥来进行破坏,因为这种攻击已经可以访问它需要的所有客户端,HttpOnly cookie 除外。

【讨论】:

Cookies 也没有存储在 DOM 中,但是当您打开开发者控制台时它们仍然出现在浏览器中...您能否向我解释一下 XSS 攻击如何在会话信息存在时造成任何混乱?在 HttpOnly cookie 中受保护(如果不是全部,大多数网站现在不应该实施这种做法吗)? 一个例子是一些恶意的 javascript 可以显示一个登录表单,使用与主机站点完全相同的样式并要求用户登录。一旦输入用户名和密码,它们将被发送到客户端- 攻击者一方。 这没有描述内存在哪里?我们实际上想知道会话密钥存储在哪里,有什么办法可以看到它们?

以上是关于SSL 握手后,客户端的会话密钥存储在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

ssl协议工作流程详解

ssl协议工作流程详解

简述SSL记录协议的操作步骤

SSL协议的握手过程

SSL协议握手工作流程详解(双向HTTPS流程)

网络安全基础之笔记二(传输层安全)