SSL 浏览器会话是否跨请求保持活动状态?

信息安全 tls 欺骗
2021-09-09 04:47:42

当客户端通过浏览器请求 SSL Web 资源(即:登录请求)然后跟进其他请求时,所有请求是否都在同一个 SSL 会话中执行?或者浏览器是否会为每个请求创建和拆除会话?

服务器是否仅通过通过 SSL 协议加密的 cookie 跟踪这些请求的会话状态,或者是否有通过 SSL 提供的任何功能,服务器知道初始请求来自与以下请求相同的浏览器?如果只是通过加密的 cookie,那么如何防止有人以某种方式欺骗 cookie 值并使用该欺骗 cookie 发出请求从而冒充原始用户?

2个回答

TL;DR:HTTP 会话和 SSL 会话是不同的实体,两者之间没有映射关系。

具体到...

当客户端通过浏览器请求 SSL Web 资源(即:登录请求)然后跟进其他请求时,所有请求是否都在同一个 SSL 会话中执行?

服务器或客户端都可以终止 SSL 连接,但出于性能原因,尽可能重用现有会话。

服务器是否仅通过通过 SSL 协议加密的 cookie 跟踪这些请求中的会话状态,或者是否有通过 SSL 提供的任何功能,其中服务器知道初始请求来自与以下请求相同的浏览器

Cookie 通常是与浏览器通信时会话维护的唯一机制。替代方案可以是作为隐藏字段传递的会话 ID,也可以是由页面上存在的自定义 JavaScript 管理的会话。事实上,客户端可以通过单个 SSL 连接多路复用多个会话。多路复用会话的一个例外是使用相互身份验证时。发生这种情况时,客户端会在 TLS 握手期间进行身份验证。建立身份与建立会话不同,但它们肯定是相关的。

如果只是通过加密的 cookie,那么如何防止有人以某种方式欺骗 cookie 值并使用该欺骗 cookie 发出请求从而冒充原始用户?

您指的是会话劫持用于防止会话劫持的一些策略是选择一个难以猜测的会话 ID(通常最好长且随机),仅通过 SSL 传递会话 ID cookie以防止网络窥探,并且不允许通过以下方式访问会话 ID cookie JavaScript不幸的是,尽管有所有这些防御措施,但根据 OWASP 2013 Top-10,损坏的身份验证和会话管理仍然是第二常见的安全漏洞。

HTTP 会话和 TLS 会话是独立的。

HTTP 通常使用 HTTP cookie 跟踪会话。来自单个 HTTP 会话的请求可以通过多个 TLS 连接发送,每个连接都有自己的 TLS 会话。

使用 TLS 会话票跟踪 TLS 会话。会话票据跟踪加密参数(使用的密码、会话密钥等);加密参数通常与单个 TLS 连接相关联,但 TLS 也可以恢复 TLS 会话以创建具有与先前连接相同的加密参数的新 TLS 连接。

此外,如果你有一个代理服务器,它可以将来自不同客户端的多个请求多路复用到一个 TLS 连接中,这意味着你可以在一个 TLS 连接中拥有多个 HTTP 会话。

当客户端通过浏览器请求 SSL Web 资源(即:登录请求)然后跟进其他请求时,所有请求是否都在同一个 SSL 会话中执行?或者浏览器是否会为每个请求创建和拆除会话?

这是实现定义的。如果用户代理认为这样做有利于性能,它可能会决定使用多个 TLS 连接和/或会话。现代浏览器通常会打开多个 TLS 连接,以使 HTTP/1.1 请求同时达到一个限制(通常是 4-8 个并发连接),然后尽可能地重用这些连接。现代浏览器通常会为 HTTP/2 请求使用单个 TLS 连接,因为 HTTP/2 原生支持请求多路复用。

服务器是否仅通过通过 SSL 协议加密的 cookie 跟踪这些请求中的会话状态

HTTP 服务器仅通过 HTTP cookie 跟踪 HTTP 会话。Web 服务器的 TLS 部分跟踪 TLS 连接,但这与 HTTP 会话无关。一些Web Server也可以通过SSL客户端证书使用相互认证来认证用户;如果服务器配置为将有关客户端证书的信息传递到 HTTP 请求(例如,作为 HTTP 标头,这也可以用于跟踪会话

或者是否有通过 SSL 提供的任何功能,其中服务器知道初始请求来自与以下请求相同的浏览器?

TLS 有会话票据来跟踪 TLS 会话。

如果只是通过加密的 cookie,那么如何防止有人以某种方式欺骗 cookie 值并使用该欺骗 cookie 发出请求从而冒充原始用户?

如果攻击者能够以某种方式从您用户的浏览器中获取 cookie,那么您已经完蛋了。