В продолжении темы о безопасности веэб-сервера Apache, а если быть точнее, то об усилении безопасности статьи Как защитить cookie в Apache.
SSLv2 подвержен атакам DROWN, POODLE и FREAK. SSLv3 подвержен атаке POODLE.
TLSv1 с использованием шифров в режиме CBC подвержен атаке POODLE.
Эти версии протокола SSL/TLS признаны слабыми и не рекомендуются к использованию.
Некоторые современные браузеры уже не открывают сайты, защищенные протоколами SSLv2 и SSLv3.
Отключаем SSlv2, SSLv3 и TLSv1 в Apache:
Протоколы SSL/TLS настраиваются с помощью директивы SSLProtocol.
Первым делом нужно отключить то, что было настроено раньше, используем PowerShell с правами администратора:
$sr = <путь к ServerRoot апача> $main_config = "$sr\conf\httpd.conf" $text = Get-Content -Raw $main_config $text = $text -Replace "((\n|\r\n)\s*SSLProtocol .*?\n)", "## `$1" $text | Set-Content -Path $main_config foreach ($a in findstr /i ^Include $main_config) { $file = $a.Split(' ')[1].replace('/','\').replace('"',''); $text = get-Content -Raw $file; $text = $text -Replace "((\n|\r\n)\s*SSLProtocol .*?\n)", "## `$1"; $text | Set-Content -Path $file; }
Далее добавляем директиву SSLProtocol TLSv1.1 TLSv1.2 на уровне сервера и в каждом виртуальном хосте, где требуется SSL/TLS. Найти все виртуальные хосты можно так:
Select-String "<VirtualHost" $main_config foreach ($a in findstr /i ^Include $main_config) { $file = $a.Split(' ')[1].replace('/','\').replace('"',''); Select-String "<VirtualHost" $file; }
sr=<путь к ServerRoot апача></div> <div>main_config = "$sr/conf/httpd.conf"</div> <div>ap_cf=</div> <div>for e in `grep -i ^Include $main_config` ; do ap_cf=$ap_cf\ ` echo $e | grep -i -v Include` ; done</div> <div>ap_cf=$main_config\ $ap_cf</div> <div>read -ra apache_cfg_files <<< "$ap_cf"</div> <div>for f in "${apache_cfg_files[@]}"; do sed -i 's;\(^\s*SSLProtocol \);##\1;g' $f; done
# egrep -in "^\s*<VirtualHost" $ap_cf</div> <div>
# egrep -in "^\s*<Connector" <Catalina_home>/conf/server.xml
# Select-String "^\s*<Connector" <Catalina_home>\conf\server.xml
Отключаем SSLv2, SSLv3 и TLSv1 в Nginx:
Добавляем (или изменяем) директиву ssl_protocols TLSv1.1 TLSv1.2; в блоках “server” и/или “http”, где включен SSL/TLS.
Отключаем SSLv2 и SSLv3 в IIS:
Здесь мы не будем отключать TLSv1.0, потому что он необходим для некоторых продуктов Microsoft, в частности RDP.
reg add "HKLM\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" /v Enabled /t REG_DWORD /d 0 /f reg add "HKLM\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" /v DisabledByDefault /t REG_DWORD /d 1 /f reg add "HKLM\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server" /v Enabled /t REG_DWORD /d 0 /f reg add "HKLM\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server" /v DisabledByDefault /t REG_DWORD /d 1 /f reg add "HKLM\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 0xFFFFFFFF /f reg add "HKLM\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v DisabledByDefault /t REG_DWORD /d 0 /f reg add "HKLM\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 0xFFFFFFFF /f reg add "HKLM\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v DisabledByDefault /t REG_DWORD /d 0 /f reg add "HKLM\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 0xFFFFFFFF /f reg add "HKLM\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v DisabledByDefault /t REG_DWORD /d 0 /f