我在 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.com
Apache 提供多域设置,则以下简单的 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";