Есть /etc/apache2/ssl-vhosts.conf c:
Include /path/to/virtual_hosts/*.conf
- путь с конфигурациями, где лежат конфиги виртуальных хостов с SSL. Для каждого - свой файл.
Mod_ssl включен.
1. Нужно было отключить TLSv1 и SSLv3.
В конфиге каждого виртаульного хоста есть директива SSLProtocol:
SSLProtocol all
Она же есть и в /etc/apache2/mods-available/ssl.conf
Пробовал вбивать в конфиг виртуального хоста:
SSLProtocol all -SSLv3 -TLSv1
и перестартовывал сервер. Не помогло.
Заработало, когда перебил SSLProtocol в ssl.conf.
Т.е. выяснилось, что директива SSLProtocol перекрывается такой же директивой в ssl.conf, и если нужно отключить какие-то протоколы, это нужно делать в ssl.conf, а не в виртуальном хосте.
2. Обратная ситуация. Нужно было отключить некоторые слабые ciphers. Директивы SSLCipherSuite на виртуальном хосте не было. Добавил ее, и это помогло.
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:...
При этом этом SSLCipherSuite был в ssl.conf дефолтовый, такой:
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
Вопросы:
- Почему нельзя переопределить
SSLProtocolдля одного виртуального хоста? - Почему директива
SSLProtocolне переопределилась в конфигурационном файле виртуального хоста? - Почему директива
SSLCipherSuiteпереопределились? - Получается, что некоторые директивы действуют для виртуального хоста, а некоторые - для веб сервера. Как узнать, какие из них какие? Какие server cpecific/systemwide, а какие vhost specific?

