因此,我在一台服务器上有多个 IP,并且为每个 IP 配置了一个 SSL 网站。这工作正常。
但是我在主 IP 上为许多非 SSL 网站提供服务。当用户尝试访问其中一个非 https 网站的 https 版本时,就会出现问题。系统会向他们提供主 SSL 网站的证书,如果他们接受该证书,则会将他们转发到 https 网站。
处理这个问题的最佳方法是什么?我尝试设置一个 apache 默认 SSL 主机来捕获这些其他请求,但似乎不起作用。也许一些重定向逻辑可以将非默认 SSL 域的请求转发到所请求站点的非 https 版本?任何想法都值得赞赏。
答案1
SSL 握手发生在 HTTP 之前,因此在浏览器中向用户显示 SSL 警告之前不会调用重定向逻辑。
避免出现该警告的唯一方法是拥有一个包含这些虚拟主机使用的服务器名称的证书,例如使用主题备用名称,或者服务器名称指示。这样,SSL 握手就可以顺利进行,之后您就可以重定向。但是,无论您做什么,您都需要为那些非 SSL 站点提供有效的证书。
另一种方法是获取非 SSL 站点的另一个 IP 地址,并在该地址上设置虚拟主机。基本上,您需要将非 SSL 站点与 SSL 站点分开。这样,用户就不会意外转到 SSL 虚拟主机并看到浏览器警告。另一方面,用户只会超时,因为 SSL 端口不适用于非 SSL 站点。
第三种方法是,如果人们试图访问非 SSL 站点,则不必关心他们是否访问 SSL 主机。这也许是最便宜、最省力的选项,但您可能无法使用。