目前,Apache 正在托管几个子域,这些子域使用 certbot 和 http 质询生成主机证书。
现在我想设置一个默认虚拟 SSL 主机,将不存在的子域重定向到主域。为此,我将生成带有 DNS 质询的通配符证书。
由于我目前无法使用 DNS 质询自动续订,因此我只想对 Apache 中的默认 SSL 主机使用通配符证书。
我的问题是:当 Apache 和浏览器之间进行第一次协商时,Apache 是否会首先在配置中查找与请求的主机匹配的证书,或者 Apache 每次都会提供在默认 ssl 主机中配置的通配符证书?
答案1
这Apache 文档包含有关为请求选择哪个 VirtualHost 的详细部分。引自“服务器如何选择正确的基于名称的虚拟主机”部分:
重要的是要认识到,基于名称的虚拟主机解析的第一步是基于 IP 的解析。基于名称的虚拟主机解析仅在将候选范围缩小到最佳基于 IP 的匹配后才选择最合适的基于名称的虚拟主机。在所有 VirtualHost 指令中对 IP 地址使用通配符 (*) 会使此基于 IP 的映射变得无关紧要。
当请求到达时,服务器将根据请求使用的 IP 地址和端口找到最佳(最具体)匹配的 <VirtualHost> 参数。如果有多个虚拟主机包含此最佳匹配的地址和端口组合,Apache 将进一步将 ServerName 和 ServerAlias 指令与请求中存在的服务器名称进行比较。
如果您从任何基于名称的虚拟主机中省略 ServerName 指令,则服务器将默认使用从系统主机名派生的完全限定域名 (FQDN)。这种隐式设置的服务器名称可能会导致违反直觉的虚拟主机匹配,因此不建议这样做。
您应该创建一个专用的默认虚拟主机。每个对未在另一个虚拟主机块中明确列出的主机的请求都将被定向到那里,因此您可以选择要在那里使用的证书。
答案2
Apache 允许您在虚拟主机级别指定 SSLCertificateFile 指令。请参阅SSL证书文件,其中写着“上下文:服务器配置,虚拟主机”。因此,无论它使用哪个虚拟主机来响应请求 - 无论是默认虚拟主机还是其他虚拟主机 - 它都将使用您在该虚拟主机中使用 SSLCertificateFile 配置的证书。
我希望这能回答你的问题?