比方说,我想要使用Apache服务器从同一台计算机上运行两个安全站点:
1. https://example.com 2. https://example.ca
上述两个站点是否可以使用端口443?
如前所述,SSL连接是在通过连接发送任何实际数据之前创build的,所以Apache无法为每个虚拟站点提供不同的SSL证书,因为它不知道正在请求哪个服务器名称。 这意味着无论实际请求什么服务器名称(在本例中为“mysite.com”或“mysite.ca”),Apache都将使用已configuration使用的默认SSL证书进行响应。 这可以在“default”443 VirtualHost或全局Apacheconfiguration中声明。
这意味着从可用性的angular度来看,你可以完全承载来自同一个Apache主机和IP的两个站点,但用户在接受证书时会收到警告,告诉他们证书是针对错误的站点。 解决这个问题的唯一方法就是拥有两个不同的IP地址并configuration你的虚拟主机,这样每个主机都可以监听不同的地址。 (请确保相应地更新DNS)
一旦证书交换发生,正常的VirtualHost规则将适用,如果这是你想做的事,你实际上可以在每个服务器名称上承载不同的内容。
这些例子有点粗糙,如果你不知道已经有的基础知识,你可以参考官方的apache文档了解如何设置虚拟主机和configurationssl。
示例:两台服务器位于不同的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上的两台服务器(在其他地方configuration),但仍然基于服务器名称提供不同的内容。
<VirtualHost *:443> ServerName mysite.com DocumentRoot /var/www/comroot SSLEngine On </VirtualHost> <VirtualHost *:443> ServerName mysite.ca DocumentRoot /var/www/caroot SSLEngine On </VirtualHost>
您可以使用一些方法从一个IP地址运行多个SSL站点,每个方法都有自己的缺点。
第一种方法是有一个涵盖两个站点的SSL证书。 这里的想法是有一个单一的SSL证书,涵盖了你想从一个IP地址托pipe的所有域。 您可以使用涵盖两个域的通配符证书来执行此操作,也可以使用“主题备用名称”。
通配符证书是* .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”字段到证书列出证书所涵盖的每个额外的主机。 这应该适用于大多数浏览器。 当然每个现代主stream浏览器。 这种方法的缺点是你必须列出将使用SSL的服务器上的每个域。 您可能不希望公开这些信息。 您可能不希望将不相关的域列在同一个证书上。 在稍后的date将其他域添加到证书中可能也很困难。
第二种方法是使用名为SNI(服务器名称指示)的东西,它是TLS中的扩展,它解决了由于客户端还没有发送主机:报头而不知道向客户机发送哪个证书的鸡与蛋问题。 作为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。
outlook未来,SNI是解决基于名称的HTTPS虚拟主机托pipe的最佳方法,但是支持可能还有一两年的时间。 如果您在不久的将来必须进行HTTPS虚拟主机,IP虚拟主机是唯一的select。
只有这些网站是在自己的IP上。
SSL连接发生在客户端请求一个网站之前,所以当build立SSL连接时,服务器不知道客户端要求什么。
例如,如果您提交.com SSL证书,这将使客户要求.ca不高兴。
解决方法是为.ca设置第二个IP,并使用.ca的SSL证书在该IP上监听单独的Web服务器实例。
是的,只要你分配多个IP的机器。 一个用于每个SSL证书/域。 通常,您需要为每个SSL服务器设置一个唯一的IP地址。 Windows,Linux,BSD和Solaris都支持多个IP在一个NIC上,或者你可以添加额外的NIC或多端口NIC。 在networking服务环境中,每台机器/ NIC分配10-20个IP是相当常见的。
其他SSL选项不符合您的标准。
通配符SSL证书可以承载多个子域,只要二级域相同,通常用于大容量虚拟主机。
共享SSL证书可以在同一个域的多台机器上使用,通常用于故障转移和负载平衡。
好的答案,但是,使用一个HTTP服务器来承载这两个站点有一个SPOF – 即一次的Apache服务器的实例。 如果Apache服务器closures,两个站点都不可访问。 双端口以太网卡怎么样? 或者甚至更好,使用虚拟化。 我是像xen或openVZ这样的虚拟化大厂。 不过,你需要在硬件上花费一些钱。
亲爱的用户请在你的apache2前面使用haproxy,在这种情况下,你将能够在不同的ssl端口上的同一个apache服务器上转发不同的域名,但是你需要在站点下configuration两个不同的站点,例如443和8443可以复制过去的第一个SSL站点,只更改里面的端口和域名别名,你会发现有关Apache2的SSL激活的帮助,您还需要定义与2 ips像127.0.1.1 web-ssl1的主机文件127.0.2.1 web-ssl2