我可以通过 HTTPS 向单独的域发送重定向吗?

我可以通过 HTTPS 向单独的域发送重定向吗?

我在一台服务器上为两个不同的域设置了 2 个 SSL。我通过将 SSL 编号 2 指向另一个端口号(在本例中为 444)来实现这一点。以下是 Apache 的代码:

<VirtualHost XX.XX.XX.XX:443>
  ServerAlias *.xxxx.com
  ServerName xxxx.com
  SSLEngine on
  SSLCertificateFile /usr/local/ssh/xxx/xxx.crt
  SSLCertificateKeyFile /usr/local/ssh/xxxx/xxxx.key
  DocumentRoot /var/www/www.xxxxx.com/web/
</VirtualHost>

Listen 444
NameVirtualHost *:444

<VirtualHost xx.xx.xx.xx:444>
  ServerAlias *.yyyyyy.com
  ServerName yyyyyy.com
  SSLEngine on
  SSLCertificateFile /usr/bin/yyyyy.com.crt
  SSLCertificateKeyFile /usr/bin/yyyy.key
  SSLCertificateChainFile /usr/bin/yyyyy.crt
  DocumentRoot /var/www/www.yyyyyy.com/web/
</VirtualHost>

目前,我的所有链接都指向https://yyyyy.com:444/因此用户看不到任何无效的 SSL 证书。问题是我有一些用户只是输入https://yyyyy.com/并且不要输入端口号,而且他们也不应该这样做。

如果我去的话,https://yyyyy.com/它正在查看 xxxx.com 的证书,并弹出无效的 SSL 证书错误。我尝试了几个 mod 重写,如果 yyyyy.com 在端口 443 上,则重定向到https://yyyyy.com:444/

我确信答案是显而易见的...但是就我的生活而言,我就是无法弄清楚!

答案1

除非您拥有一个共同顶级域名的两个子域名,并且获得了通配符证书,否则这是不可能的。

之所以不可能,是因为当客户输入https://yyyyy.com/(注意,不是:444)时,他们的浏览器会启动与监听端口 443 的进程的 TLS 连接。通过此端口,证书和握手信息(包括主机名)默认绑定到该 ip:port 组合的 vhost 进行交换。

只有在建立 TLS 连接后,您才能交换 HTTP 级别 301 重定向。但此时客户已经看到了 的无效证书信息https://xxxx.com

另外,我注意到您正在将 别名www.xxxx.com为与 相同的虚拟主机xxxx.com,这将产生相同的效果。您的证书(除非它是通配符)仅适用于xxxx.comwww.xxxx.com

答案2

答案3

Antoine Benkemoun,以前你不能使用基于名称的虚拟主机进行多个 SSL,但使用单独的端口可以绕过这个限制。
如果不使用,你仍然不能加密传输协议

我要在这里猜测,但我怀疑您没有将 GnuTLS 用于您的 Web 服务器 ssl 库,因此您所要求的是基于名称的 vhosting 和 SSL,并且不起作用。

答案4

使用 SSL,一个 IP = 一个证书。如果您需要多个证书,请获取一个额外的 IP。例外情况是为多个子域签名的多域证书。

相关内容