为什么Apache httpd告诉我基于名称的虚拟主机仅与启用了SNI的浏览器一起使用(RFC 4366)


9

为什么Apache在我的日志中给我这个错误消息?这是假阳性吗?

[warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)

我最近从Centos 5.7升级到6.3,并由此升级到了更新的httpd版本。我一直像下面这样进行ssl virtualhost配置。共享相同证书的所有域(通常/总是使用通配符证书)共享相同的IP。但是以前从未收到过此错误消息(或者,我是否可能对日志的关注不够?)据我了解,这在没有SNI(服务器名称指示)的情况下应该可以工作

这是我的httpd.conf文件的相关部分。没有此VirtualHost,我不会收到错误消息。

NameVirtualHost 10.101.0.135:443

<VirtualHost 10.101.0.135:443>
  ServerName sub1.domain.com

  SSLEngine on
  SSLProtocol -all +SSLv3 +TLSv1
  SSLCipherSuite ALL:!aNull:!EDH:!DH:!ADH:!eNull:!LOW:!EXP:RC4+RSA+SHA1:+HIGH:+MEDIUM
  SSLCertificateFile /opt/RootLive/etc/ssl/ssl.crt/wild.fareoffice.com.crt
  SSLCertificateKeyFile /opt/RootLive/etc/ssl/ssl.key/wild.fareoffice.com.key
  SSLCertificateChainFile /opt/RootLive/etc/ssl/ca/geotrust-ca.pem
</VirtualHost>

<VirtualHost 10.101.0.135:443>
  ServerName sub2.domain.com

  SSLEngine on
  SSLProtocol -all +SSLv3 +TLSv1
  SSLCipherSuite ALL:!aNull:!EDH:!DH:!ADH:!eNull:!LOW:!EXP:RC4+RSA+SHA1:+HIGH:+MEDIUM
  SSLCertificateFile /opt/RootLive/etc/ssl/ssl.crt/wild.fareoffice.com.crt
  SSLCertificateKeyFile /opt/RootLive/etc/ssl/ssl.key/wild.fareoffice.com.key
  SSLCertificateChainFile /opt/RootLive/etc/ssl/ca/geotrust-ca.pem
</VirtualHost>

Answers:


7

这是因为您的VirtualHost指令与您的ServerName指令和/或证书的CN不匹配。除非您具有通配符证书(其中非通配部分必须相同),否则所有三个都必须相同。


所以这里的答案是将<VirtualHost 10.101.0.135:443>行更改为<VirtualHost sub2.domain.com:443>?可能吗?
MichaelJones 2014年

@MichaelJones可以解决问题吗?
费尔南多·圣地亚哥

@FernandoSantiago我现在为虚拟主机购买了不同的IP地址,因为我发现SNI不够可靠。我的VirtualHost声明中有这些ip地址。
MichaelJones 2015年

1
这完全解决了我的问题。我使用的是VirtualHost通配符,但ServerName指令与证书CN匹配。所有3个配对和中提琴!PS:这个答案serverfault.com/questions/578061/…告诉您如何获取放入RSA证书的CN
3bdalla

3

这不是错误,而是警告消息。

之所以得到它,是因为1)您已经更新了Apache版本,并且2)您有2个使用相同的IP地址(而不是使用2个IP)的SSL VirtualHost。

由于共享IP,没有SNI支持的浏览器只会获得第一个网站,而不会获得第二个网站。


没有SNI的浏览器将获得为第一个网站配置的证书-但是为了将它们实际映射到用于服务请求的虚拟主机,Host通常会检查标头。
Shane Madden

@ShaneMadden,我不相信这是正确的,因为在建立SSL连接之前未检查Host:标头。这就是获得SNI支持的重点。否则,每个SSL VH需要1个IP。因此,如果没有SNI,Apache将默认使用该IP地址找到第一个VH,实际上将忽略Host:标头。
righttuff 2012年

...否则,您可以在1个单个IP地址上执行100个SSL NameBasedVirtualHosts,我们知道这是不正确的(没有服务器和客户端的SNI支持)。
righttuff 2012年

4
Otherwise you could do 100s of SSL NameBasedVirtualHosts on 1 single IP address, and we know that's not true (without SNI support by server and client)您可以。通常当所有人都具有相同的证书,通配符或备用名称证书时,才可以正常使用此证书。但是,假设您有两个具有自己的SSL证书的虚拟主机-domain1.com和domain2.com,首先配置了domain1.com。一个不支持SNI的浏览器请求domain2.com-他们收到证书域不匹配错误,因为它们被发送了domain1证书-但是,如果单击它,他们确实会获得domain2内容。
Shane Madden

1
如果忽略了主机头,那么即使是简单且广泛部署的“具有多个基于名称的虚拟主机的通配符证书”的情况也将中断。无论如何,这里有几个问题的示例,在这里我已经回答了这些问题。serverfault.com/q/292637 serverfault.com/q/330212
Shane Madden
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.