Apache通过负载均衡器访问时出现错误的证书

我有一个服务器有两个SSL证书的设置,一个用于内部访问的地方,它被访问host.my-local.net和其他外部访问的地方访问类似于185.185.185.185 (这是不是实际的IP地址,但它是一个IP地址,因为没有分配给它的主机名)。 当通过外部地址访问时,连接将通过一个我无权访问的负载均衡器/防火墙,我只知道它将特定端口上的传入连接转换为SSL端口上的内部地址。

问题是,当外部连接进来时,我得到浏览器警告,该网站伪装成host.my-local.net ; 它将提交host.my-local.net的证书,而不是185.185.185.185 。 我在我的apache2configuration文件中为这两个名称设置了虚拟主机,所以我认为服务器在区分外部连接和局域网连接时遇到了问题。 我没有使用简单的NAT来解决这个问题,所以我不知道如果负载平衡器使得请求看起来像是来自局域网而不是内部的,那么为什么会有所作为。

我已经validation了,我使用的浏览器支持SNI(Google Chrome)和Apache 2.4,显然支持它,而不需要NameVirtualHost指令。 但是,文档说:

 In 2.3.11 and later, any time an IP address and port combination is used in multiple virtual hosts, name-based virtual hosting is automatically enabled for that address. 

但是,这两个不同的虚拟主机所使用的IP地址并不相同,一个是内部(LAN)IP地址,一个是外部(全球可见)IP地址,那么在这里适用?

为了澄清我的configuration,我设置了两个虚拟主机,如下所示:

 <VirtualHost 185.185.185.185:443> # here i specify the certificate for 185.185.185.185, eg SSLCertificateFile /etc/ssl/private/185.185.185.185.crt </VirtualHost> <VirtualHost host.my-local.net:443> # here i specify the certificate for host.my-local.net, eg SSLCertificateFile /etc/ssl/private/host.my-local.net.crt </VirtualHost> 

感谢@ShaneMadden的评论,我能够弄清楚这一点。

这个问题是我需要两个VirtualHosts使用通配符来指定相同的IP。 所以我的configuration需要如下所示:

 <VirtualHost *:443> # here i specify the certificate for 185.185.185.185, eg SSLCertificateFile /etc/ssl/private/185.185.185.185.crt ServerName 185.185.185.185 </VirtualHost> <VirtualHost *:443> # here i specify the certificate for host.my-local.net, eg SSLCertificateFile /etc/ssl/private/host.my-local.net.crt ServerName host.my-local.net </VirtualHost>