拒绝与其他主机名的 HTTPS 连接

拒绝与其他主机名的 HTTPS 连接

我已经为我的网站安装了 SSL 证书并正在运行,但是,5 个不同的域名都指向同一个主机,如果用户被引导到该域名,https://(the other four)他们就会看到一个巨大的红色屏幕。

如果我只有一个 VirtualHost,它似乎可以捕获所有域名,而这并不是我想要的。我尝试创建另一个 VirtualHost 来捕获未经认证的域名:

NameVirtualHost *:443

<VirtualHost *:443>
    ServerName example2.com
    ServerAlias example3.com
    DocumentRoot /srv/deadwww/  # contains nothing of consequence
</VirtualHost>

<VirtualHost *:443>
    ServerName example.com
    SSLEngine on
    SSLCertificateFile /path/to/certs/example.com.crt
    ...

但 Apache 根本就无法启动,它叫道:

[error] Server should be SSL-aware but has no certificate configured

因此,如果我只有一个 VirtualHost 条目,那么全部名称,大多数情况下身份验证失败,如果我尝试在到达那里之前捕获错误的名称...我不能,因为 Apache 不允许我这样做。我该如何解决这个问题?

答案1

如果没有以下三点之一,你就无法解决这个问题:

  • 更多 IP 地址- 将带有 SSL 的域名移动到与非 SSL 域名不同的地址。
  • 更多证书(以及使用信噪比) - 为每个域配置的证书,Apache 将根据客户端在 TLS 握手中发送的主机名提供该证书。请注意,XP 上的 IE 和 Chrome 仍会收到证书警告!
  • 不同的证书- 涵盖所有相关域名的通配符或备用名称证书。

如果没有上述三个更改之一,那么在 Apache 配置中所做的任何操作都无法解决此问题,因为任何类型的重定向或请求阻止都将在 SSL 握手完成后发生(用户必须单击证书警告才能进行重定向)。

答案2

您不能通过这种方式托管多个 SSL 站点;每个站点都需要自己的 IP 地址,或者您需要一个通配符安全证书:http://wiki.apache.org/httpd/NameBasedSSLVHosts

答案3

如果您拥有 5 个或更少的顶级域名,您可以获得“多主机”证书,这比 5 个 IP 加上 5 个单独的证书更便宜。使用多主机,您不需要新的 IP,也不必进行 DNS 更改(即,同一 IP 上有 5 个不同的 fqdn)。

答案4

不清楚您设置的目的,但似乎您的五 (5) 个域中只有一个 (1) 应该通过端口 443 使用 HTTPS,对吗?那么您是否可以将其他四 (4) 个域的请求强制发送到启用 HTTPS 的主站点?

为其他四 (4) 个主机创建一个 VirtualHost 配置,如下所示:

<VirtualHost *:443>
  ServerName example1.com
  ServerAlias example2.com
  ServerAlias example3.com
  ServerAlias example4.com

  RewriteEngine on
  RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

  ### NOTE: Might have to put dummy SSL info here.

</VirtualHost>

ServerName应该会捕获端口 443 上针对、ServerAlias的所有不正确请求,并将它们全部重定向到。请注意,您可能必须在此处包含虚拟 SSL 信息,但重定向应该可以正常工作。example1.comexample2.comexample3.comexample4.comexample.com

相关内容