使用虚拟主机证书

我试图在基于名称的虚拟主机中启用SSL。 从文档我明白,SNI不需要明确启用,它会自动发生,如果服务器和客户端都符合最低要求,我认为他们这样做:

  • Apache / 2.4.25(Win32)
  • OpenSSL的/ 1.0.2k
  • Firefox / 51.0.1(x64)

我把configuration剥离到最低限度:

Listen 80 LoadModule ssl_module modules/mod_ssl.so <VirtualHost *:80> ServerName localhost DocumentRoot "D:/Servidores/Apache/htdocs" </VirtualHost> Listen 443 SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4 SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4 SSLHonorCipherOrder on SSLProtocol all -SSLv3 SSLProxyProtocol all -SSLv3 SSLPassPhraseDialog builtin SSLSessionCacheTimeout 300 <VirtualHost _default_:443> ServerName localhost DocumentRoot "D:/Servidores/Apache/htdocs" SSLEngine on SSLCertificateFile "D:/DOS/Apache24/conf/server.crt" SSLCertificateKeyFile "D:/DOS/Apache24/conf/server.key" </VirtualHost> SSLRandomSeed startup builtin SSLRandomSeed connect builtin <VirtualHost *:80> ServerName tmp DocumentRoot "D:/tmp" </VirtualHost> <VirtualHost *:443> ServerName tmp DocumentRoot "D:/tmp" SSLCertificateFile "D:/Servidores/Apache/certificados/tmp.crt" SSLCertificateKeyFile "D:/Servidores/Apache/certificados/tmp.key" </VirtualHost> 
 C:\>httpd -f conf/prueba-test.conf 

但是,当我尝试加载https://tmp/我始终从<VirtualHost _default_:443> (对于主机localhost )而不是ServerName tmp (对于主机tmp )的证书获取证书。

这是logging的东西:

 [Fri Mar 03 14:11:57.360237 2017] [ssl:warn] [pid 11684:tid 668] AH01906: tmp:80:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?) [Fri Mar 03 14:11:57.361240 2017] [ssl:warn] [pid 11684:tid 668] AH01906: localhost:443:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?) [Fri Mar 03 14:11:57.433220 2017] [ssl:warn] [pid 11684:tid 668] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache] [Fri Mar 03 14:11:57.433220 2017] [ssl:warn] [pid 11684:tid 668] AH01906: tmp:80:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?) [Fri Mar 03 14:11:57.434223 2017] [ssl:warn] [pid 11684:tid 668] AH01906: localhost:443:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?) [Fri Mar 03 14:11:57.436228 2017] [mpm_winnt:notice] [pid 11684:tid 668] AH00455: Apache/2.4.25 (Win32) OpenSSL/1.0.2k configured -- resuming normal operations [Fri Mar 03 14:11:57.436228 2017] [mpm_winnt:notice] [pid 11684:tid 668] AH00456: Apache Lounge VC14 Server built: Dec 17 2016 10:42:52 [Fri Mar 03 14:11:57.436228 2017] [core:notice] [pid 11684:tid 668] AH00094: Command line: 'httpd -d D:/DOS/Apache24 -f conf/prueba-ssl.conf' [Fri Mar 03 14:11:57.444250 2017] [mpm_winnt:notice] [pid 11684:tid 668] AH00418: Parent: Created child process 15380 [Fri Mar 03 14:11:57.910024 2017] [ssl:warn] [pid 15380:tid 648] AH01906: localhost:443:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?) [Fri Mar 03 14:11:57.988164 2017] [ssl:warn] [pid 15380:tid 648] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache] [Fri Mar 03 14:11:57.988164 2017] [ssl:warn] [pid 15380:tid 648] AH01906: localhost:443:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?) [Fri Mar 03 14:11:57.988164 2017] [mpm_winnt:notice] [pid 15380:tid 648] AH00354: Child: Starting 64 worker threads. 

问题是什么?

这可能与它们的configuration顺序有关。 尝试将<VirtualHost _default_:443>configuration移动到文件底部并重新加载/重新启动apache。

最后,这只是一个愚蠢的错误。 我在我的第二个虚拟主机中错过了这个:

 SSLEngine on 

由于这是启用S​​SL的指令,因此在此主机中根本没有SSL(无论是SNI还是常规)。

(该指令在我的所有基于IP的虚拟主机中都存在多年,但是当我开始使用SNI时,有人在我testing的主机上设法删除它。)