使用适当的证书将 Apache SSL 流量重定向到子域

使用适当的证书将 Apache SSL 流量重定向到子域

我目前有一台服务器,它有一个 DynDNS 子域(我们称之为 foo.dyn.com)。我还有一个适当的域,其 CNAME 指向该子域(我们称之为 bar.baz.com)。foo.dyn.com 有一个自签名 SSL 证书,而 bar.baz.com 有一个适当的 CA 签名 SSL 证书。

我已经设置了 Apache,将任一域的非 SSL 请求重定向到https://bar.baz.com,效果很好。我的问题是:我希望任何尝试访问的人https://foo.dyn.com都被重定向到https://bar.baz.com。我尝试了 2 个解决方案,但都不太正确:

  1. 有 1 个 VirtualHost,使用 CA 证书。当有人尝试访问时,这显然会给出有关域使用错误证书的可怕警告https://foo.dyn.com
  2. 有 2 个 VirtualHosts,一个用于 foo.dyn.com,使用自签名证书,另一个用于 bar.baz.com,使用正确的证书。foo.dyn.com 有一个重定向子句,将所有流量重定向到https://bar.baz.com,这很有效,但您仍然会收到自签名证书警告。此外,一些非 Web 浏览器 HTTP 客户端(如 wget)在指向 bar.baz.com 时会获取 foo.dyn.com 的证书

有什么办法可以解决这个问题吗?

答案1

这是协议栈的问题。每个 IP 每个端口只能有一个 SSL 证书。

原因如下:Apache 和类似系统的 VirtualHost 系统基于HTTP 主机标头但是,这个标头是在 SSL 连接建立后发送的(因为所有标头都是在建立 SSL 连接后发送的,否则就没什么用了)。

因此,服务器选择证书的唯一方法是基于连接传入的接口或 IP 和端口。

解决该警告的一个方法是将第二个域作为 SubjectAltName 添加到证书中。

答案2

如果您的客户端支持,您可以使用服务器名称指示。(请参阅这个答案以获取链接。

相关内容