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

fli*_*fly 27 virtualhost apache-2.2

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

该网站运行速度很慢,但正在运行。我在错误日志中收到以下信息。

[Error] Hostname example.com provided via SNI and hostname www.example.com provided via HTTP are different
Run Code Online (Sandbox Code Playgroud)

我预计缓慢与上述消息有关。关于为什么会出现这种情况以及我能做些什么的任何想法?

Arn*_*fer 28

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

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)"
Run Code Online (Sandbox Code Playgroud)

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

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

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


小智 14

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

我很好奇什么样的攻击是可能的,我在 Security Stack Exchange 上问了这个问题:Apache2 的错误代码 AH02032 阻止了什么样的攻击?


alx*_*omz 1

乍一看似乎是客户端问题...是什么浏览器导致了此问题?

该消息表明客户端在 ssl 连接设置期间发送的主机名与 SSL 层启动后客户端在 HTTPS 请求中发送的主机名不同。

  • 好吧,只是通过删除端口 443 的 NameBasedVirtualHost 指令来禁用 SNI。我想我现在不需要它。我认为这应该有效。 (2认同)