通过 SNI 提供主机名,但 HTTP 请求中未提供主机名

通过 SNI 提供主机名,但 HTTP 请求中未提供主机名

我在 Apache 日志中收到此错误:

[Mon Oct 28 16:11:33.074606 2019] [ssl:error] [pid 30553] AH02031: Hostname mywebsite.com provided via SNI, but no hostname provided in HTTP request

我找不到任何相关信息。这是什么意思?

网站没有响应,并且 CPU 占用率持续了一小时,我不得不从控制台停止它,当我查看错误日志时,我只看到上述错误,这正是 CPU 占用率达到 100% 时的确切时间

我怀疑这可能是某种形式的黑客攻击,因为它是类似的消息SNI 与 HTTP 提供的域之间的冲突

答案1

我怀疑这可能是某种形式的黑客攻击,因为它是类似的消息SNI 与 HTTP 提供的域之间的冲突

虽然理论上这可能是黑客所为,但也可能完全无辜。这与您链接的问题中的问题不同,在后者中,有人故意在 ClientHello 和Host标头中使用不同的名称。

在这种情况下,根本没有Host标头。我怀疑的不是攻击者,而是有人在没有正确阅读规范的情况下尝试 HTTP,或者有人尝试简单的 HTTP/1.0 请求(Host与 HTTP/1.1 相反,它在所有情况下都不需要标头)是否仍然有效。

例如,如果www.example.comApache 提供多域设置,则以下简单的 Perl 代码将生成这样的日志条目:

use IO::Socket::SSL;
my $cl = IO::Socket::SSL->new('www.example.com:443');
print $cl "GET / HTTP/1.0\r\n\r\n";

并且经过轻微的修改(具有预期的Host标题)该消息将不会出现:

print $cl "GET / HTTP/1.0\r\nHost: www.example.com\r\n\r\n";

相关内容