如何在 apache2.4 中禁用未配置的 HTTPS 域?

如何在 apache2.4 中禁用未配置的 HTTPS 域?

我希望服务器响应https://abc.def.com,但不响应,同时当两个域指向同一个 IP 地址时https://def.com仍提供服务。http://def.com

我目前有一个类似的配置:

<IfModule mod_ssl.c>
  Listen 1.2.3.4:443
  <VirtualHost 1.2.3.4:443>
    ServerName abc.def.com
    [SSL on, key & cert file, etc.]
    [...]
  </VirtualHost>
</IfModule>

该网站按预期运行,到目前为止一切都很好,但由于某种原因,服务器也响应https://def.com并提供 abc.def.com 的证书,而不是拒绝连接,尽管这在任何地方都没有配置。default-ssl.conf 被禁用。

有什么想法可以告诉服务器不提供证书但拒绝未配置域的连接吗?我认为这应该与 SNI 有某种关系,但我不确定是否可行以及如何可行。

答案1

不可能。如果该主机名没有特定配置,Apache 将在默认主机中应答。并且,在连接的安全端设置了有效证书之前,您无法控制发回的内容。

所以唯一的选择是:

  1. 拥有对 def.com 有效的证书。此时您可以重定向回 http,但如果已经费尽心思获取证书,那又何必呢?请注意,证书可以以低价(甚至免费)获得。

  2. 单独的 IP 地址。

答案2

您可以使用流量重定向到 http 来实现

 <VirtualHost 1.2.3.4:443>
    ServerName def.com
    Redirect 301 / http://def.com
  </VirtualHost>

或者使用重写规则

RewriteCond %{HTTPS} on
RewriteCond %{SERVER_NAME} ^def.com
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

答案3

Apache 配置看起来不错,您可以在 DNS 级别修复它。

配置您的主机以解析 abc.def.com,但是不是通过编辑本地 hosts 文件并删除以下条目

1.2.3.4 def.com

相关内容