同一IP上具有SSL的多个域


Answers:


28

我认为如何解释虚拟主机和SSL / TLS的真正问题是一个好主意。

通过HTTP连接到apache服务器时,您将同时发送一组HTTP标头。他们看起来像这样:

GET /index.html HTTP/1.1
 Host: www.nice-puppies.com

如果您有虚拟主机,那么Apache将查看hosts字段,然后为您获取正确的index.html。问题是当您添加SSL / TLS时。在您发送http请求之前,服务器会设置加密。因此,直到身份验证/加密完成后,服务器才知道您要访问www.nice-puppies.com还是www.evil-haxxor.com。服务器无法猜测(因为发送错误的证书会给您带来讨厌的错误消息)。

一种解决方案是通配符证书(如上所述),该证书对* .nice-puppies.com有效。这样,您可以在多个域中使用相同的证书,但不能拥有* .com证书(可以,但是,这对其他所有人都非常不利),因此通常您需要为每个域使用单独的IP HTTPS域。


4
很好的解释,但是您可以拥有一个UC证书,该证书可以在一个证书中允许多个域
Sam Cogan 2010年

1
是的,您可以拥有统一通信证书(UCC / UC证书)。我可能应该提到他们。据我所知,它们主要与Exchange / Office Communication Server一起使用。而且,如果对不同的站点使用相同的证书,则会滥用x509语义。但是它们确实适用于大多数TLS堆栈。
pehrs 2010年

6
也是SNI。pehrs,您的声明不再是确定的。您的解释在历史上是准确的,但不再反映当前的技术。
华纳2010年

4
SNI在Windows XP上无法(但还可以)与IE6一起使用。考虑市场份额,哪种限制价值。我相信原始用户对可能发生的事情比为解决该问题而存在的一系列黑客更感兴趣。
pehrs 2010年

尝试纠正SHTTP到HTTPS末尾的拼写错误,但是由于编辑量太小而被拒绝。
斯图尔特

8

解决此问题的真正方法是“服务器名称指示”:

http://en.wikipedia.org/wiki/Server_Name_Indication

它只是刚刚开始部署到服务器和Web客户端中,因此您现在不能真正使用它了,但是希望在几年后这不会成为一个大问题。


2

问题是SSL证书绑定到IP地址而不是主机名。当连接进入HTTPS请求的IP地址时,第一个操作是通过传递服务器证书和/或客户端证书来建立SSL通信。在连接握手的此阶段,Apache服务器无法知道要通过的请求是针对什么的。对于HTTP(非SSL)流量而言,这是不同的,因为在建立连接后,如果客户端发送Host标头或将其传递给配置的第一个虚拟主机,则Apache服务器可以确定要使用的虚拟主机配置。

如果您在同一域下有多个虚拟主机,则可以在IP地址上设置一个通配符证书,并且可以使用定义了不同服务器名称的多个虚拟主机;但是,如果这些服务器名称不在同一域名下,则会生成客户端服务器错误。这将起作用,因为通配符证书对于该域名下的所有主机名均有效。如果域名不同,您将需要另一个IP地址,因为为该IP地址定义的第一个证书将是为连接客户端而提供的证书。


1

可以将其作为SAN(主题备用名称)添加到一个SSL证书中。在我的工作中,我不得不要求组织sll证书。我用了globalsign。


1

实际上,使用现代软件,您可以使用称为“ SNI-服务器名称指示”的新功能,通过一个IP地址为多个HTTPS站点提供服务。

http://en.wikipedia.org/wiki/Server_Name_Indication

http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI

我尚未亲自使用此功能,但这对内部和Intranet网站来说听起来不错。大多数现代浏览器都支持SNI。IE6不支持SNI,但IE7支持。

(更正:20100426-Windows XP完全不支持SNI。WindowsVista及更高版本确实支持SNI。请参见http://msdn.microsoft.com/zh-cn/library/dd208005%的 “ 2.2.3节”。28v = PROT.13%29.aspx#id8)。


2
使用IE,支持不是来自IE版本,而是来自底层OS版本。Vista及以上版本支持SNI。XP没有,所以即使在XP上使用IE8,也不会获得SNI。
纳斯科(Nasko)2010年

1

我正在处理同一问题。作为我的测试,IE7和更高版本(仅在Win7和Vista中)/ Chrome / Firefox / Safari / Opera支持“服务器名称指示”。实际上,如果浏览器使用Tsl 1.0,则它支持“服务器名称指示”。


0

我认为OP正在询问如果他向具有多个虚拟主机的IP添加SSL证书会发生什么情况。如果没有其他虚拟主机使用SSL证书,则他应该是无罪的。


好吧,我对这个问题感到困惑。Q的标题为黑色,内容为白色。
Iraklis 2010年

这是白色的
Iraklis


0

如果您尝试在同一IP上添加两个证书,则到处都只会使用第一个读取的证书。一个IP-一个SSL证书。

如果要在同一IP上获取更多SSL证书,请考虑获取多域(即所谓的UCC-@ godaddy进行检查)或通配符(更昂贵)的证书。


您是说首先在Apache conf中添加的证书将同时用于这两个证书?
尼廷斯2010年

1
如果您有两个证书-站点A和B,并且apache依次按主机A.conf和B.conf加载主机的配置,则它将使用来自A.conf的证书。或相反亦然。
Andrejs Cainikovs
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.