Есть /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?