SNI 与 HTTP 提供的域之间的冲突

SNI 与 HTTP 提供的域之间的冲突

我最近将一个带有小商店的 WordPress 网站从托管服务提供商移到了我自己的服务器上,该服务器运行的是 Ubuntu Server 12.04.2 LTS 和 Apache 2.2.22。我需要为商店使用 SSL。我在新 IP 上为服务器设置了几个简单的虚拟主机,一个绑定到特定 IP 的端口 80,另一个绑定到端口 443。两者的虚拟主机配置中都有 和 。我ServerName www.example.com有。ServerAlias example.comSSLStrictSNIVHostCheck off

该网站运行速度非常慢,但可以正常运行。我的错误日志中出现以下内容。

[Error] Hostname example.com provided via SNI and hostname www.example.com provided via HTTP are different

我认为速度缓慢与上述消息有关。您知道为什么会出现这种情况以及我该怎么做吗?

答案1

查看您的访问日志(而不是错误日志)。根据错误的时间和日期,您应该能够识别有问题的请求并找出用户代理。就我而言,它是一个机器人:

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)"

我的服务器回答“HTTP 400:错误请求”。

如果我没记错的话,在 TLS 协商中,客户端会发送两次主机名:一次是在 SNI(服务器名称指示)中建立 SSL 连接之前,一次是在实际 HTTP 请求之后。如果服务器名称不匹配,则表示客户端已损坏,与服务器的配置方式无关。

也许他们有一天会修复他们的机器人,与此同时你可以忽略它。我怀疑这会导致主机变慢,除非请求的频率非常高。

答案2

也许这个错误是由故意地一些客户会用它来测试您服务器的漏洞。我发现来自的请求researchscan367.eecs.umich.edu触发了我维护的服务器上的错误。在这种情况下,发生错误是一件好事®。

我很好奇可能发生什么样的攻击,所以我在 Security Stack Exchange 上问了这个问题:Apache2 的错误代码 AH02032 可以防止哪种攻击?

答案3

就我而言,问题在于创建带有下划线的新虚拟主机。我有一个通配符 SSL 证书。

无效:

<VirtualHost *:443>
        SSLEngine on
        ServerName sub_domain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>

尽管 Apache 确实成功重启,但我收到了 HTTP 400 错误。在错误日志中:

[Wed Sep 05 11:28:00.349960 2018] [ssl:error] [pid 19906:tid 140392626808576] AH02031: Hostname sub_domain.example.com provided via SNI, but no hostname provided in HTTP request

但删除下划线有效:

<VirtualHost *:443>
        SSLEngine on
        ServerName subdomain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>

答案4

检查您的 /etc/hosts 文件,查看您是否将域名分配给本地(内部)IP 地址。更改 /etc/hosts 后,不要忘记重新启动名称服务缓存守护程序 service nscd restart

相关内容