Thierry Lam Asked: 2009-10-10 17:57:26 +0800 CST2009-10-10 17:57:26 +0800 CST 2009-10-10 17:57:26 +0800 CST 我可以在同一台服务器上使用端口 443 运行两个不同的安全站点吗? 772 假设我想要两个使用 Apache 服务器在同一台机器上运行的安全站点: 1. https://example.com 2. https://example.ca 上述两个站点都可以使用端口 443 吗? apache-2.2 6 个回答 Voted Best Answer emills 2009-10-10T18:48:27+08:002009-10-10T18:48:27+08:00 如前所述,SSL 连接是在通过连接发送任何实际数据之前创建的,因此 Apache 无法为您的每个虚拟站点提供不同的 SSL 证书,因为它不知道正在请求哪个服务器名称。这意味着无论实际请求的服务器名称是什么(在本例中为“mysite.com”或“mysite.ca”),Apache 都会使用已配置为使用的默认 SSL 证书进行响应。这可能在“默认”443 VirtualHost 或全局 Apache 配置中声明。 从可用性的角度来看,这意味着您绝对可以从相同的 apache 主机和 IP 托管两个站点,但是用户在接受证书时会收到警告,告诉他们证书是用于错误的站点。解决此问题的唯一方法是拥有两个不同的 IP 地址并配置您的虚拟主机,以便它们各自侦听不同的地址。(确保相应地更新 DNS) 证书交换完成后,将应用正常的 VirtualHost 规则,如果您愿意,您实际上可以在每个服务器名称上托管不同的内容。 这些示例有点粗略,如果您还不了解基础知识,则需要查阅有关设置虚拟主机和配置 ssl 的确切参数名称的官方 apache 文档。 示例:具有不同文档根的不同 IP 地址上的两台服务器,每台都提供正确的证书 <VirtualHost 1.1.1.1:443> ServerName mysite.com DocumentRoot /var/www/comroot SSLEngine On // Configure certificate for mysite.com </VirtualHost> <VirtualHost 2.2.2.2:443> ServerName mysite.ca DocumentRoot /var/www/caroot SSLEngine On // Configure certificate for mysite.ca </VirtualHost> 示例:同一 IP 上的两台服务器使用错误的证书(在别处配置)但仍根据服务器名称提供不同的内容。 <VirtualHost *:443> ServerName mysite.com DocumentRoot /var/www/comroot SSLEngine On </VirtualHost> <VirtualHost *:443> ServerName mysite.ca DocumentRoot /var/www/caroot SSLEngine On </VirtualHost> David Pashley 2009-10-10T23:05:19+08:002009-10-10T23:05:19+08:00 您可以使用几种方法从一个 IP 地址运行多个 SSL 站点,每种方法都有自己的缺点。 第一种方法是拥有涵盖两个站点的 SSL 证书。这里的想法是拥有一个单一的 SSL 证书,该证书涵盖您希望从单一 IP 地址托管的所有域。您可以使用涵盖两个域的通配符证书或使用主题备用名称来执行此操作。 通配符证书将是 *.example.com,它将涵盖 www.example.com、mail.example.com 和 support.example.com。通配符证书存在许多问题。首先,每个主机名都需要有一个公共域,例如使用 *.example.com,您可以拥有 www.example.com,但不能拥有 www.example.org。其次,您不能可靠地拥有多个子域,即您可以拥有 www.example.com,但不能拥有 www.eu.example.com。这可能适用于早期版本的 Firefox (<= 3.0),但不适用于 3.5 或任何版本的 Internet Explorer。第三,如果您希望它由根 CA 签名,通配符证书比普通证书要贵得多。 主题备用名称是一种使用 X509 证书扩展的方法,它列出了对该证书有效的备用主机名。它涉及向证书添加一个“subjectAltName”字段,其中列出了您希望证书涵盖的每个其他主机。这应该适用于大多数浏览器;当然是每个现代主流浏览器。这种方法的缺点是您必须列出服务器上将使用 SSL 的每个域。您可能不希望公开此信息。您可能不希望在同一个证书上列出不相关的域。以后向您的证书添加其他域也可能很困难。 第二种方法是使用称为 SNI(服务器名称指示)的东西,它是 TLS 中的扩展,它解决了由于客户端尚未发送 Host: 标头而不知道将哪个证书发送给客户端的鸡与蛋问题。作为 TLS 协商的一部分,客户端将所需的主机名作为选项之一发送。唯一的缺点是客户端和服务器支持。浏览器中的支持往往比服务器中的更好。Firefox 从 2.0 开始支持它。Internet Explorer 从 7 开始支持它,但仅在 Vista 或更高版本上。Chrome 也仅在 Vista 或更高版本上支持它。Opera 8 和 Safari 8.2.1 都有支持。其他浏览器可能不支持。 阻止采用的最大问题是服务器支持。直到最近,两个主要的网络服务器都不支持它。Apache 在 2009 年 7 月发布的 2.2.12 中获得了 SNI 支持。在撰写本文时,IIS 不支持任何版本的 SNI。nginx、lighttpd 和 Cherokee 都支持 SNI。 展望未来,SNI 是解决基于名称的 HTTPS 虚拟主机的最佳方法,但支持可能会在一两年内不完整。如果您必须在不久的将来毫无问题地进行 HTTPS 虚拟主机,那么基于 IP 的虚拟主机是唯一的选择。 David Mackintosh 2009-10-10T18:28:02+08:002009-10-10T18:28:02+08:00 仅当站点位于其自己的 IP 上时。 SSL 连接发生在客户端请求网站之前,因此当 SSL 连接建立时,服务器不知道客户端要请求什么。 例如,如果您提供 .com SSL 证书,这会使请求 .ca 的客户不高兴。 解决方案是为 .ca 设置第二个 IP,并让 Web 服务器的单独实例使用 .ca 的 SSL 证书在该 IP 上侦听。 joe 2009-10-10T23:11:20+08:002009-10-10T23:11:20+08:00 是的,只要您为机器分配多个 IP。每个 SSL 证书/域一个。通常,每个 SSL 服务器都需要一个唯一的 IP。Windows、Linux、BSD 和 Solaris 都支持单个 NIC 上的多个 IP,或者您可以添加额外的 NIC 或多端口 NIC。在 Web 服务环境中为每台机器/NIC 分配 10-20 个 IP 是很常见的。 其他不适用于您的标准的 SSL 选项。 通配符 SSL 证书可以托管多个子域,只要二级域相同,通常用于海量虚拟主机。 共享 SSL 证书可用于同一域的多台计算机,通常用于故障转移和负载平衡。 Nikolas Sakic 2009-10-11T03:01:27+08:002009-10-11T03:01:27+08:00 好的答案,然而,使用一个 HTTP 服务器来托管两个站点有一个 SPOF - 即一次 apache 服务器实例。如果该 apache 服务器出现故障,则两个站点都无法访问。双端口以太网卡怎么样?或者,更好的是,使用虚拟化。我是 xen 或 openVZ 等虚拟化的忠实粉丝。但是,您需要在硬件上花费一些钱。 Moon 2016-01-04T09:28:12+08:002016-01-04T09:28:12+08:00 亲爱的用户请在您的 apache2 前面使用 haproxy,在这种情况下,您将能够在不同的 ssl 端口上转发同一 apache 服务器上的不同域,但您需要在启用了 443 和 8443 等端口的站点下配置两个不同的站点可以复制过去的第一个 ssl 站点并仅在端口和域别名内更改您将找到有关 apache2 ssl 激活的帮助您还需要使用 2 个 ips 定义主机文件,例如 127.0.1.1 web-ssl1 127.0.2.1 web-ssl2
如前所述,SSL 连接是在通过连接发送任何实际数据之前创建的,因此 Apache 无法为您的每个虚拟站点提供不同的 SSL 证书,因为它不知道正在请求哪个服务器名称。这意味着无论实际请求的服务器名称是什么(在本例中为“mysite.com”或“mysite.ca”),Apache 都会使用已配置为使用的默认 SSL 证书进行响应。这可能在“默认”443 VirtualHost 或全局 Apache 配置中声明。
从可用性的角度来看,这意味着您绝对可以从相同的 apache 主机和 IP 托管两个站点,但是用户在接受证书时会收到警告,告诉他们证书是用于错误的站点。解决此问题的唯一方法是拥有两个不同的 IP 地址并配置您的虚拟主机,以便它们各自侦听不同的地址。(确保相应地更新 DNS)
证书交换完成后,将应用正常的 VirtualHost 规则,如果您愿意,您实际上可以在每个服务器名称上托管不同的内容。
这些示例有点粗略,如果您还不了解基础知识,则需要查阅有关设置虚拟主机和配置 ssl 的确切参数名称的官方 apache 文档。
示例:具有不同文档根的不同 IP 地址上的两台服务器,每台都提供正确的证书
示例:同一 IP 上的两台服务器使用错误的证书(在别处配置)但仍根据服务器名称提供不同的内容。
您可以使用几种方法从一个 IP 地址运行多个 SSL 站点,每种方法都有自己的缺点。
第一种方法是拥有涵盖两个站点的 SSL 证书。这里的想法是拥有一个单一的 SSL 证书,该证书涵盖您希望从单一 IP 地址托管的所有域。您可以使用涵盖两个域的通配符证书或使用主题备用名称来执行此操作。
通配符证书将是 *.example.com,它将涵盖 www.example.com、mail.example.com 和 support.example.com。通配符证书存在许多问题。首先,每个主机名都需要有一个公共域,例如使用 *.example.com,您可以拥有 www.example.com,但不能拥有 www.example.org。其次,您不能可靠地拥有多个子域,即您可以拥有 www.example.com,但不能拥有 www.eu.example.com。这可能适用于早期版本的 Firefox (<= 3.0),但不适用于 3.5 或任何版本的 Internet Explorer。第三,如果您希望它由根 CA 签名,通配符证书比普通证书要贵得多。
主题备用名称是一种使用 X509 证书扩展的方法,它列出了对该证书有效的备用主机名。它涉及向证书添加一个“subjectAltName”字段,其中列出了您希望证书涵盖的每个其他主机。这应该适用于大多数浏览器;当然是每个现代主流浏览器。这种方法的缺点是您必须列出服务器上将使用 SSL 的每个域。您可能不希望公开此信息。您可能不希望在同一个证书上列出不相关的域。以后向您的证书添加其他域也可能很困难。
第二种方法是使用称为 SNI(服务器名称指示)的东西,它是 TLS 中的扩展,它解决了由于客户端尚未发送 Host: 标头而不知道将哪个证书发送给客户端的鸡与蛋问题。作为 TLS 协商的一部分,客户端将所需的主机名作为选项之一发送。唯一的缺点是客户端和服务器支持。浏览器中的支持往往比服务器中的更好。Firefox 从 2.0 开始支持它。Internet Explorer 从 7 开始支持它,但仅在 Vista 或更高版本上。Chrome 也仅在 Vista 或更高版本上支持它。Opera 8 和 Safari 8.2.1 都有支持。其他浏览器可能不支持。
阻止采用的最大问题是服务器支持。直到最近,两个主要的网络服务器都不支持它。Apache 在 2009 年 7 月发布的 2.2.12 中获得了 SNI 支持。在撰写本文时,IIS 不支持任何版本的 SNI。nginx、lighttpd 和 Cherokee 都支持 SNI。
展望未来,SNI 是解决基于名称的 HTTPS 虚拟主机的最佳方法,但支持可能会在一两年内不完整。如果您必须在不久的将来毫无问题地进行 HTTPS 虚拟主机,那么基于 IP 的虚拟主机是唯一的选择。
仅当站点位于其自己的 IP 上时。
SSL 连接发生在客户端请求网站之前,因此当 SSL 连接建立时,服务器不知道客户端要请求什么。
例如,如果您提供 .com SSL 证书,这会使请求 .ca 的客户不高兴。
解决方案是为 .ca 设置第二个 IP,并让 Web 服务器的单独实例使用 .ca 的 SSL 证书在该 IP 上侦听。
是的,只要您为机器分配多个 IP。每个 SSL 证书/域一个。通常,每个 SSL 服务器都需要一个唯一的 IP。Windows、Linux、BSD 和 Solaris 都支持单个 NIC 上的多个 IP,或者您可以添加额外的 NIC 或多端口 NIC。在 Web 服务环境中为每台机器/NIC 分配 10-20 个 IP 是很常见的。
其他不适用于您的标准的 SSL 选项。
通配符 SSL 证书可以托管多个子域,只要二级域相同,通常用于海量虚拟主机。
共享 SSL 证书可用于同一域的多台计算机,通常用于故障转移和负载平衡。
好的答案,然而,使用一个 HTTP 服务器来托管两个站点有一个 SPOF - 即一次 apache 服务器实例。如果该 apache 服务器出现故障,则两个站点都无法访问。双端口以太网卡怎么样?或者,更好的是,使用虚拟化。我是 xen 或 openVZ 等虚拟化的忠实粉丝。但是,您需要在硬件上花费一些钱。
亲爱的用户请在您的 apache2 前面使用 haproxy,在这种情况下,您将能够在不同的 ssl 端口上转发同一 apache 服务器上的不同域,但您需要在启用了 443 和 8443 等端口的站点下配置两个不同的站点可以复制过去的第一个 ssl 站点并仅在端口和域别名内更改您将找到有关 apache2 ssl 激活的帮助您还需要使用 2 个 ips 定义主机文件,例如 127.0.1.1 web-ssl1 127.0.2.1 web-ssl2