4 Май 2016

Усиливаем HTTPS на web-сервере

Hardening HTTPS on web-server

Title: Усиливаем HTTPS на web-сервере Content: Протокол HTTPS, который используется для защиты передаваемых данных в WWW, в настоящее время становится основным способом соединения с сетью. В теории, данные передаваемые в рамках такой сессии недоступны никому кроме их отправителя и получателя.

Однако, на практике в применяемых для этого криптографических протоколах SSL и TLS в последние годы было обнаружены масса проблем, которые потенциально могу привести к раскрытию передаваемых данных.

В связи с этим как сами SSL и TLS, так и программное обеспечение, которое их обрабатывает, постоянно модернизируются и дополняются. Это процесс обусловливает необходимость и постоянных проверок, обновления и настройки обеспечивающих работу по HTTPS web-серверов.

В сети имеется ряд специализированных онлайн-тестов позволяющих оценить степень надёжности соединения с конкретным web-сервером, а иногда даже и получить рекомендации для приведения их в надлежащее текущему моменту состояние. Одним из таких тестов является Qualys SSL labs test.

Пример его работы для этого сайта.

Qualys SSL labs kostikov.co test result

Как видно, была получена наивысшая оценка надёжности 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 обнаруживаются достаточно регулярно.


HTTP  lighttpd  security  SSL