1

我正准备打开 nginx ssl_early_data以启用带有 TLS 1.3 的 RTT-0。

我明白,如果我做得不对,重放攻击就成为可能。我了解,为防止这种情况,您还需要使用$ssl_early_data

在早期数据中发送的请求会受到重放攻击。为了防止在应用层受到此类攻击,应使用 $ssl_early_data 变量。

我不明白的是,将这个指令放在 nginx 配置中是否足够,或者我的服务器上的 PHP 应用程序是否/如何应该以某种方式使用这个 $ssl_early_data 变量并进行一些额外的检查。

4

2 回答 2

0

我不明白传递变量如何使事情变得神奇安全。

您可以在此处阅读有关 0-RTT 以及应用程序实际管理它的需要的更多信息。

这绝对不容易,而且我认为 0-RTT 应该仅限于具有专门安全工程师的性能关键应用程序。

于 2021-03-21T06:58:09.967 回答
0

您是正确的,此标头本身不执行任何操作,您需要在 PHP 应用程序中添加额外的逻辑。

在我的情况下,我使用的是 fastcgi 变量而不是标题:

fastcgi_param  TLS_EARLY_DATA     $ssl_early_data;

然后在 PHP 中,您需要检查任何有重放攻击风险的请求:

if ($_SERVER['TLS_EARLY_DATA'] === '1') {
    http_response_code(425);
    exit;
}

您需要对想要重放保护的所有内容进行此类检查(例如POST /transfer_money)。

虽然你可以把它放在没有副作用的东西上(例如。GET /account_balance)。

由于攻击者无法解码重放中的有效负载,因此 GET 没有牙齿,您可以允许这些请求使用 TLS 早期数据。


最后,大多数浏览器还不支持 HTTP 425 Too Early,所以我强烈建议返回一个错误页面,告诉他们“刷新并重新提交”表单。

随着浏览器支持的改进,看到错误页面的人会越来越少,浏览器会透明地处理 425 错误,但我们还没有做到。

“425 Too Early”目前支持:

  • 火狐 58+

您可以在此处跟踪其他浏览器:

于 2021-05-24T15:46:02.620 回答