Я пытаюсь включить SSL на виртуальных хостах на основе имен. Из документов я понимаю, что SNI не нужно включать явно, это происходит автоматически, если и сервер, и клиент соответствуют минимальным требованиям, и я думаю, что они это делают:
Я сократил конфигурацию до минимума:
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
).
Вот что записывается:
[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.
В чем может быть проблема?
В конце концов, это была всего лишь глупая ошибка. Мне не хватало этого на моем вторичном виртуальном хосте:
SSLEngine on
Поскольку это директива, которая включает SSL, У меня в таком хосте вообще не было SSL (ни SNI, ни штатного).
(Директива уже много лет присутствует на всех моих виртуальных хостах на базе IP, но когда я начал играть с SNI, мне кому-то удалось удалить ее на хосте, который я тестировал.)
Возможно, это связано с порядком, в котором они настроены. Попробуйте переместить <VirtualHost _default_:443>
конфигурацию в конец файла и перезагрузите / перезапустите apache.