我已经为我的网站安装了 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.com
example2.com
example3.com
example4.com
example.com