stunnel + HAProxy + Apache问题,多个站点证书

目前我正在使用以下scheme来同时提供静态和dynamic内容。

我用X-Forwarded-For支持补丁编译了stunnel

Internet(http) – > haproxy(frontend1) – > Apache Farm

Internet(https) – > stunnel – > haproxy(frontend2) – > Apache Farm

Stunnel被configuration为使用来自xxxx.com的证书。 可以添加对stunnel的支持来与其他证书一起服务吗?

cert = /etc/stunnel/group.cert key = /etc/stunnel/private.key verify = 0 debug = local0.debug CAfile = /etc/stunnel/group.cert chroot = /var/run/stunnel4/chroot setuid = stunnel4 setgid = stunnel4 failover = prio xforwardedfor = yes TIMEOUTclose=0 socket=l:TCP_NODELAY=1 socket=r:TCP_NODELAY=1 [https] accept = 443 connect = HAPROXYHOST:FRONTEND2PORT 

我知道我可以运行另一个stunnel实例,它绑定到另一个IP地址,但是如果我们决定承载更多的站点,我们没有无限的公共地址,我知道可以configurationApache为每个VirtualHost提供不同的证书,可以用这个scheme做这个? 或者也许从stunnel改为Apache mod_proxy或其他解决scheme。

非常感谢。

在相同地址的同一端口上提供不同的证书取决于TLS服务器名称指示支持,这不受stunnel支持。

使用Apache作为你的代理服务器确实可以为你提供所需的服务器端支持,但是请记住,服务器名称指示的客户端支持(ahem,Windows XP)还没有普及。

另一种方法是,如果价格在您的价格范围内,则是提供主题替代名称的证书。

一般来说,在一个IP上使用SSL / TLS和多个站点时,有两种select。

首先是让客户端发送他们感兴趣的主机名称与最初的请求。 这就是http://en.wikipedia.org/wiki/Server_Name_Indication提供的内容,但是并不是所有的客户端都支持这个function(请参阅维基百科页面,查看哪些内容和哪些内容不起作用)。 通过SNI,主机名在安全协商开始时可用,因此服务器可以select正确的证书进行响应。

如果你不能使用SNI,那么你有一个小问题。 客户端出现并说“嗨,我想要做SSL”,但你不知道他们想要的主机名,所以你不能select正确的证书。 你所知道的只是IP地址。 因此,为此,您必须确保您返回的证书对该IP上的所有不同虚拟主机有效。

后者不一定像第一次听起来那么糟糕。 一种select是获得通配符证书,例如* .mysite.com。 只要你提供www.mysite.com和images.mysite.com(即在相同的通配符空间),你很好。 另一种select是在证书中使用subjectAltName 。 使用此选项,您的一个证书对多个网站有效。 这样,当您将一个公共证书发回给客户端时,它将适用于他们想要的任何主机。 相当多的CA都支持后一种select,而且它通常是EVA证书的唯一选项(通常不能获得通配符),而且每次您想添加一个新的虚拟主机上的IP,他们会收取一小笔费用,并发出一个新的证书,其中的额外名称。