HypoGump Asked: 2020-05-19 00:06:19 +0800 CST2020-05-19 00:06:19 +0800 CST 2020-05-19 00:06:19 +0800 CST 如何设置 TCP 快速打开 cookie 超时? 772 TCP 快速打开:服务器应定期更改用于生成 TFO cookie 的加密密钥,以防止攻击者随着时间的推移收集许多 cookie 用于对服务器的协同攻击。 如何获取默认时间段(如果存在)或在 Linux 上设置它? linux tcp 1 个回答 Voted Best Answer Guss 2020-05-19T01:50:58+08:002020-05-19T01:50:58+08:00 据我了解,有两种方法可以在 Linux 中设置 TCP 快速打开密钥 - 系统范围和每个套接字。 每插槽 TCP_FASTOPEN如果应用程序知道 TCP 快速打开,应用程序可以使用 中的选项请求 TCP 快速打开行为setsockopt()。当它被设置时,从的实现中do_tcp_setsockopt可以看出,密钥是通过tcp_fastopen_init_key_once() 从一些随机字节调用来生成的。 据我了解,应用程序可以通过再次调用来重新生成密钥setsockopt(),TCP_FASTOPEN或者通过TCP_FASTOPEN_KEY使用正确的密钥数据调用来设置特定的密钥。您最初也可以这样做,而不是设置TCP_FASTOPEN. 我猜TCP_FASTOPEN_KEY这对于在单播服务器集群中同步密钥很有用。 全系统 您可以使用 sysctl 可调参数net.ipv4.tcp_fastopen_key来设置系统范围的 TFO 密钥,以供不知道 TFO 的进程使用。这是 Wikimedia 的 TFO 技术 wiki 中的讨论——我假设它是用于管理 Wikimedia 的服务器 TFO 支持——最后,他们有示例代码来更新系统 TFO 密钥。 概括 在 Linux 中,没有计划轮换 TCP 快速打开密钥——它要么是应用程序的责任,要么是系统管理员必须设置的东西。 据我了解,如果应用程序是 TFO 感知的,那么就是这样 - 应用程序负责他们使用的任何安全措施,系统管理员无法覆盖它。这对我来说很有意义,因为它降低了在自定义软件集群环境中控制和同步 TFO 密钥的成本。 笔记 在 Linux 中,从 5.3 版开始,有两个 TFO 密钥——一个主密钥和一个备份密钥。这样做是为了减少重置密钥的成本 - 每次重置密钥时,前一个密钥都会复制到备份位置,因此如果具有旧密钥的 cookie 的客户端发送 SYN,该数据包仍将有效。因此,如果要刷新所有客户端上的所有 cookie,则需要设置两次 TFO 键。
据我了解,有两种方法可以在 Linux 中设置 TCP 快速打开密钥 - 系统范围和每个套接字。
每插槽
TCP_FASTOPEN
如果应用程序知道 TCP 快速打开,应用程序可以使用 中的选项请求 TCP 快速打开行为setsockopt()
。当它被设置时,从的实现中do_tcp_setsockopt
可以看出,密钥是通过tcp_fastopen_init_key_once()
从一些随机字节调用来生成的。据我了解,应用程序可以通过再次调用来重新生成密钥
setsockopt()
,TCP_FASTOPEN
或者通过TCP_FASTOPEN_KEY
使用正确的密钥数据调用来设置特定的密钥。您最初也可以这样做,而不是设置TCP_FASTOPEN
. 我猜TCP_FASTOPEN_KEY
这对于在单播服务器集群中同步密钥很有用。全系统
您可以使用 sysctl 可调参数
net.ipv4.tcp_fastopen_key
来设置系统范围的 TFO 密钥,以供不知道 TFO 的进程使用。这是 Wikimedia 的 TFO 技术 wiki 中的讨论——我假设它是用于管理 Wikimedia 的服务器 TFO 支持——最后,他们有示例代码来更新系统 TFO 密钥。概括
在 Linux 中,没有计划轮换 TCP 快速打开密钥——它要么是应用程序的责任,要么是系统管理员必须设置的东西。
据我了解,如果应用程序是 TFO 感知的,那么就是这样 - 应用程序负责他们使用的任何安全措施,系统管理员无法覆盖它。这对我来说很有意义,因为它降低了在自定义软件集群环境中控制和同步 TFO 密钥的成本。
笔记
在 Linux 中,从 5.3 版开始,有两个 TFO 密钥——一个主密钥和一个备份密钥。这样做是为了减少重置密钥的成本 - 每次重置密钥时,前一个密钥都会复制到备份位置,因此如果具有旧密钥的 cookie 的客户端发送 SYN,该数据包仍将有效。因此,如果要刷新所有客户端上的所有 cookie,则需要设置两次 TFO 键。