我有一台安装了 apache2 的 Ubuntu 服务器,它为 2 个不同的域提供服务example.com
,并且test.net
具有有效的 SSL 证书。我在端口 443 上设置了 VirtualHosts 来为我的 SSL 安全域提供服务,并在端口 80 上设置了 VirtualHosts 来重定向到 https。
现在我遇到的问题是,我租用 vServer 的公司有一个id.provider.com
指向 vServers IP 地址的域,并且我的日志和邮件中充斥着错误,因为网络爬虫访问了这个id.provider.com
域。
因此,如果服务器收到与我的两个域都不匹配的请求,我希望有一个后备虚拟主机,只需断开连接即可。对于端口 80 上的不安全 http 请求,我已经实现了这一点,但是对于端口 443 上的安全 https 请求,我遇到了问题。
我在 443 上设置了一个后备 VirtualHost 文件,如下所示:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ErrorLog ${APACHE_LOG_DIR}/default_error.log
CustomLog ${APACHE_LOG_DIR}/default_access.log combined
<Location />
<RequireAny>
Require all denied
</RequireAny>
</Location>
SecRuleEngine On
SecRule RESPONSE_STATUS "403" "phase:4,id:1,drop"
</VirtualHost>
</IfModule>
但是当我启用此配置时,我既无法访问https:example.com
,https://test.net
也无法https://id.provider.com
再访问。Firefox、Chrome 和 Edge 只会说发生了 SSL 协议错误。如果我禁用此配置https:example.com
并且https://test.net
工作正常,但网络爬虫再次出现错误。只要其他主机工作正常,我不会介意回退出现错误。我该如何配置此回退,以使其不会阻止我的其他主机工作?我认为发生这种情况的原因是回退没有信任链来建立安全连接,但是我该如何为不属于我的域提供证书?此外,我无法为任何有人愚蠢地指向我的服务器的域设置证书。
我知道,我也可以关闭这个警告,但令我烦恼的是,有人会通过输入完全不相关的 URL 进入“我的网站”。
答案1
您必须SSLEngine On
启用全部端口 443 的虚拟主机。即使是这里的后备主机。
因为你无论如何都要拒绝所有访客,所以你实际上并不需要有效的证书,因此只需使用您碰巧拥有的任何证书即可 – 您甚至可以为或其他任意域生成自签名证书goaway.invalid
。不受欢迎的访问者是否成功到达您的 403 错误页面,或者他们是否因证书不可接受而中止,这在实际中没有区别。