一个IP地址和多个虚拟主机的通配符证书(Windows,Apache 2.4.2,OpenSSL 1.0.2e)

我已经search和search,但我找不到解决我的问题,所以很抱歉,如果这听起来很熟悉,但我很茫然。

我有:

  • Windows环境
  • Apache 2.4.2
  • OpenSSL 1.0.2e
  • 一个IP地址(开发盒:127.0.0.1)
  • 多个虚拟主机(www.site.co.uk,sub.site.co.uk等)
  • 来自Comodo的真正的域validation通配符证书

我需要为我的所有虚拟主机使用通配符证书。

我已经使用openssltesting了站点/证书,并validation了它。

当使用80端口的标准HTTP时,所有的站点工作正常。

当我启用httpd-ssl.conf时,我开始陷入困境。

我已经看到并尝试了几个http-ssl.confconfiguration的例子,但都导致间歇性连接失败,即Firefox:“ 安全连接失败 ”,IE11:“ 无法显示此页面 ”。 但是 ,如果我刷新页面(在每个浏览器中)页面显示,我可以看到证书是有效的。

从我读到的,它指向不正确的configurationhttp-ssl.conf,但我已经尝试了Mozilla SSLconfiguration生成器( https://mozilla.github.io/server-side-tls/ssl-config -generator / ),很多stackoverflow的答案,但仍然没有喜悦。

这是我目前的httpd-ssl.conf文件:

Listen 443 https SSLStrictSNIVHostCheck off SSLPassPhraseDialog builtin SSLSessionCache "shmcb:C:/Apache2.4/logs/ssl_scache(512000)" SSLSessionCacheTimeout 300 SSLProtocol All -SSLv2 -SSLv3 SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS <VirtualHost 127.0.0.1:443> ServerName www.site.co.uk ServerAlias www.site.co.uk DocumentRoot C:\WebServer\Apache2.4\htdocs\www.site.co.uk SSLEngine On SSLCertificateFile "C:\WebServer\Apache2.4\conf\extra\ssl\site_wildcard.crt" SSLCertificateKeyFile "C:\WebServer\Apache2.4\conf\extra\ssl\site_wildcard.key" SSLCertificateChainFile "C:\WebServer\Apache2.4\conf\extra\ssl\site_wildcard.ca-bundle" SSLCACertificateFile "C:\WebServer\Apache2.4\conf\extra\ssl\addtrustexternalcaroot.crt" </VirtualHost> <VirtualHost 127.0.0.1:443> ServerName sub.site.co.uk ServerAlias sub.site.co.uk DocumentRoot C:\WebServer\Apache2.4\htdocs\sub.site.co.uk </VirtualHost> 

经过大量的testing,我原来的评论没有解决问题。

证书configuration正确。

在运行testing时,在像ssllabs.com这样的网站上,即使没有发生configuration变更,协议和握手结果也会随机不同。

使用OpenSSL进行testing/validation,零星地产生了正确的结果,但大部分时间导致:

ssl握手失败

事实certificate,罪魁祸首是我在我的httpd.conf文件中有这个:

 AcceptFilter https none 

在发表评论之后,解决了这个问题:

 #AcceptFilter https none 

当我解释configuration权限时,您将您的V主机设置为本地接口。 当您想要正确地提供页面时,您需要将主机设置为可访问的IP:

 <VirtualHost 0.0.0.0:443> ServerName www.site.co.uk ServerAlias www.site.co.uk ... </VirtualHost> 

或到你的服务器IP(即192.168.23.4)

 <VirtualHost 192.168.23.4:443> ServerName www.site.co.uk ServerAlias www.site.co.uk ... </VirtualHost> 

也许这可以解决你的问题。

更新:我的configuration看起来像这样(linux系统)

 <IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin [email protected] ServerName www.foo.bar.com ServerAlias foo.bar.com DocumentRoot /var/www/foo SSLEngine on SSLProtocol TLSv1 SSLHonorCipherOrder On SSLCipherSuite RC4-SHA:HIGH:!ADH SSLCertificateChainFile /etc/apache2/ssl/2015/intermediate.crt SSLCertificateFile /etc/apache2/ssl/2015/public.crt SSLCertificateKeyFile /etc/apache2/ssl/private.open.key </VirtualHost> <VirtualHost *:443> ServerAdmin [email protected] ServerName www.bar.com ServerAlias bar.com DocumentRoot /var/www/bar SSLEngine on SSLProtocol TLSv1 SSLHonorCipherOrder On SSLCipherSuite RC4-SHA:HIGH:!ADH SSLCertificateChainFile /etc/apache2/ssl/2015/intermediate.crt SSLCertificateFile /etc/apache2/ssl/2015/public.crt SSLCertificateKeyFile /etc/apache2/ssl/private.open.key ... </VirtualHost> </IfModule>