![在无法添加额外证书的服务器上通过 https 运行网站的最佳方式](https://linux22.com/image/596664/%E5%9C%A8%E6%97%A0%E6%B3%95%E6%B7%BB%E5%8A%A0%E9%A2%9D%E5%A4%96%E8%AF%81%E4%B9%A6%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E9%80%9A%E8%BF%87%20https%20%E8%BF%90%E8%A1%8C%E7%BD%91%E7%AB%99%E7%9A%84%E6%9C%80%E4%BD%B3%E6%96%B9%E5%BC%8F.png)
所以我处于一个奇怪的情况,因为我使用一个特定的服务器来托管东西,而这些东西无法托管在其他地方(它可以访问用户数据库等,否则无法访问)。我和系统管理员进行了很多讨论,看起来运行我们网站的唯一方法:www.foo.com 通过 https 可能是通过某种代理。
目前,用户访问 www.foo.com 后会被重定向到 https:// host-server.com/foo,因为该服务器上安装了 SSL 证书。我希望用户访问 https:// www.foo.com。
有人告诉我,由于各种原因,向主机服务器添加额外的 SSL 证书将会非常困难。
所以我想知道是否有可能让 DNS 记录指向一个新服务器,然后该服务器与浏览器建立 HTTPS 连接。然后它将请求转发到 https:// host-server.com/foo 并将回复反馈给原始请求者。
这有意义吗?这可行吗?我对 SSL 的经验非常有限,所以提前感谢您的帮助 :)
ps:超链接中存在间隙,因为 ServerFault 对我发布的链接数量感到不满意!
答案1
无论使用哪种协议(HTTP、HTTPS 等),主机名 www.foo.com 总是会产生相同的 IP 地址。它可以提供 HTTP(默认端口 80)和 HTTPS(默认端口 443)。因此,如果无法使用端口 443(无论出于何种原因),您必须将 HTTP 和 HTTPS 都转移到不同的 IP 地址。
非默认端口
正如“Frands Hansen”已经提到的,您可以使用非默认端口进行 HTTPS。但您必须在所有 URL 中包含此端口(例如https://www.foo.com:1234/)。这可能不合适。
HTTPS 反向代理
如果您想要或必须保留 HTTP 服务器,您可以考虑将 HTTPS 放在单独的主机名上,例如https://secure.foo.com/. 可以是 SSL 代理,例如https://host-server.com/foo在你的例子中。
为此,您需要一个可以通过公共 IP 和 TCP 端口 443 访问的主机。在此机器上,您将运行一个响应所有 HTTPS 请求的 Web 服务器。它将所有请求转发到现有的 HTTP 服务器,并通过加密通道将答案返回给客户端。您可以使用任何常见的 Web 服务器来实现这一点,例如 apache、nginx 或 lighttpd,或者更专业的解决方案,例如磅。您应该会找到很多有关如何执行此操作的示例。请记住,默认情况下,HTTPS 代理和 HTTP Web 服务器之间的所有流量均未加密。
再次强调,在同一台机器上执行 HTTP 和 HTTPS 并没有错。这仅仅取决于现有的安装和要求。主要是要使用的公共 IP 和端口以及兼容性SNI 证书在客户端。
答案2
最简洁的答案是不。
您不能这样做。您需要做的是为服务器获取额外的 IP 地址,或者将网站放在 443 以外的其他端口上。
最后一种可能性是使用 SNI - 但我建议您不要这样做,因为 Windows XP 不支持它 - 而且由于某种原因,很多人仍然使用 XP。
唯一正确的解决方案是为服务器获取另一个 IP 地址。这将使之成为可能。这样做的原因是 SSL 绑定在端口上,并且在任何数据交换之前协商加密 - 主机头是数据交换的一部分。