我对虚拟化还很陌生,但我想知道这是否可行。
我知道在一台主机上使用多个 SSL 并非易事(需要通配符 SSL 或一些奇怪的操作,显然并非在每个浏览器上都能运行)。
因此,我正在考虑创建多个虚拟化服务器,每个服务器都有一个 apache 或 nginx 服务器实例,并带有不同的 SSL 证书。
但这可能吗?
为了清楚起见,这里有一个架构:
Host A (ip: 1.2.3.4)
Virtual server 1 with NGinx
For: https://www.example.com (with SSL for www.example.com)
For: http://www.exp.com
Virtual server 2 with NGinx
For: https://www.anotherexample.com (with SSL for www.anotherexample.com)
For: http://www.anoexp.com
For: http://www.anoexp2.com
Etc
令我震惊的是,从我所了解的情况来看,SSL 证书在将主机名发送到服务器之前就开始了,因此服务器(无论是否虚拟)都不知道在哪里处理请求,并且在处理请求时也不知道使用哪个证书。
为了尽可能简洁,我想在我的唯一一台服务器上使用两个不同的 https 网站,并且我希望可以使用虚拟化来实现,但我对此并不了解任何技术知识。
抱歉,如果我不是很清楚,这对我来说也有点困惑。
谢谢你的帮助,我很感激!
答案1
我认为你对一些事情有一点误解。
1)最广泛支持的 SSL 实现需要 1 个证书每个 IP不是每个主机。您可以拥有一台具有多个 IP 的服务器,并在每个 IP 上托管不同的网站,并为每个网站分配不同的 SSL 证书,而不会出现问题。
2) 在虚拟化环境中,每个虚拟机都有不同的 IP 和主机名,大多数情况下它们不会与主机共享 IP。
2 号所做的一切都是绕远路到达 1 号。如果您不需要 2 号提供的逻辑分离,则应坚持使用 1 号。
答案2
是的,无论是否使用虚拟化,这都是可能的。您不限于每个服务器只有一个 SSL 站点。使用传统技术,您仅限于每个 IP 地址只有一个 SSL 站点(一个证书,可能多个站点...)。
SNI 正在改变这一现状,通过在协商 SSL 或 TLS 之前发送 Host 标头,基本上就可以允许多个证书。它尚未被广泛采用,而且您真的不能指望 John Public 拥有必要的技术(尽管对于内部使用,您可能能够控制环境以使其可靠地工作)。
答案3
似乎你应该为每个 HTTPS 服务器分配一个单独的 IP 地址,或者只使用具有多个名称的 SSL 证书
检查这个文档:http://nginx.org/en/docs/http/configuring_https_servers.html