Title: Усиливаем HTTPS на web-сервере Content: Протокол HTTPS, который используется для защиты передаваемых данных в WWW, в настоящее время становится основным способом соединения с сетью. В теории, данные передаваемые в рамках такой сессии недоступны никому кроме их отправителя и получателя.
Однако, на практике в применяемых для этого криптографических протоколах SSL и TLS в последние годы было обнаружены масса проблем, которые потенциально могу привести к раскрытию передаваемых данных.
В связи с этим как сами SSL и TLS, так и программное обеспечение, которое их обрабатывает, постоянно модернизируются и дополняются. Это процесс обусловливает необходимость и постоянных проверок, обновления и настройки обеспечивающих работу по HTTPS web-серверов.
В сети имеется ряд специализированных онлайн-тестов позволяющих оценить степень надёжности соединения с конкретным web-сервером, а иногда даже и получить рекомендации для приведения их в надлежащее текущему моменту состояние. Одним из таких тестов является Qualys SSL labs test.
Пример его работы для этого сайта.
Как видно, была получена наивысшая оценка надёжности A+ grade.
Лучший способ достичь того же результата практически на любом современном web-сервере это воспользоваться помощником конфигурирования Mozilla SSL Configuration Center. Он позволяет создать рекомендуемую на сегодня конфигурацию для всех наиболее популярных серверов исходя из соотношения безопасность соединения / совместимость со старыми клиентскими приложениями.
Рекомендую использовать вариант intermediate как оптимальный.
В случае с Lighttpd для получения высшей оценки конфигурация HTTPS будет выглядеть следующим образом.
root@beta:~ # cat /usr/local/etc/lighttpd/lighttpd.conf
...
# -- SSL support
$SERVER["socket"] == ":443" {
protocol = "https://"
ssl.engine = "enable"
ssl.disable-client-renegotiation = "enable"
ssl.dh-file = "/etc/ssl/dhparams.pem"
ssl.ec-curve = "secp384r1"
setenv.add-environment = (
"HTTPS" => "on"
)
ssl.use-sslv2 = "disable"
ssl.use-sslv3 = "disable"
ssl.honor-cipher-order = "enable"
ssl.cipher-list = "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"
setenv.add-response-header = (
"Strict-Transport-Security" => "max-age=15768000;"
)
# -- main cert
...
}
Ну и, напоследок, могу порекомендовать регулярно проводить тесты своего web-сервера в будущем, ведь новые потенциальные проблемы в SSL / TLS обнаруживаются достаточно регулярно.