Усиление SSL для веб-сервера Apache

При установке веб-сервера на ОС и установке SSL сертификата на данном веб-сервере, могут использоваться протоколы и алгоритмы шифрования, которые могут быть скомпрометированы. Рассмотрим на примере ОС CentOS 6 и CentOS 7 настройки веб-сервера, позволяющие исключить изъяны в работе защищенного соединения.

CentOS 6

Закажем VDS, на сайте ukrnames.com c ОС – Сentos 6.

Заходим на сервер по SSH и проверяем версия ОС :

cat /etc/redhat-release
CentOS release 6.7 (Final)

Версия ОС последняя, обновлять ничего не стоит.

Добавим репозиторий epel:

yum install epel-release

Установим веб-сервер apache, mod_ssl и криптографический пакет openssl:

yum install openssl httpd mod_ssl

Проверяем версии apache и openssl:

httpd -v
Server version: Apache/2.2.15 (Unix)
openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

Проверим теперь какие последние уязвимости были устранены/исправлены в текущей версии openssl:

rpm -q --changelog openssl | grep CVE-2016

strongssl2

Данная версия нам подходит, уязвимость CVE-2016-0800 можно избежать отключив протокол SSLv2.

Полный список уязвимостей и их описаний можно найти на openssl.org

Подключим к веб-серверу тестовый домен ukrnames.idua.org и подключим к нему SSL-сертификат , не затрагивая основных конфигураций веб-сервера относительно безопасного соединения.

Проверим качество работы безопасного соединения сайта ukrnames.idua.org с помощью сайта https://www.ssllabs.com/ssltest/analyze.html?d=ukrnames.idua.org

strongssl3

Получили оценку “C” – это довольно плохо.

В первую очередь устраним проблему с SSLv3 отключив его. Так же отключим алгоритм шифрования RC4.

Идем в настройки SSL веб-сервера /etc/httpd/conf.d/ssl.conf

Заменим “SSLProtocol all -SSLv2” на “SSLProtocol all -SSLv2 -SSLv3”:

sed -i 's/SSLProtocol all -SSLv2/SSLProtocol all -SSLv2 -SSLv3/g' /etc/httpd/conf.d/ssl.conf

Теперь настроим алгоритмы шифрования.

Заменим “SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES:” на “SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH” и перезагрузим веб-сервер:

sed -i 's/SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES:/SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH/g' /etc/httpd/conf.d/ssl.conf
/etc/init.d/httpd restart

И вновь проверим сайт.

strongssl4

Получили оценку “А” – это то, что нам нужно.

Но, можно получить оценку “A+”, для этого нам нужно включить поддержку HSTS (HTTP Strict Transport Security).

Проверяем подключен ли модуль headers:

httpd -M | grep headers
 headers_module (shared)
Syntax OK

Модуль подключен. Теперь можно добавить в файл /etc/httpd/conf.d/ssl.conf строку :

Header always set Strict-Transport-Security “max-age=31536000; includeSubDomains”

Перезагружаем веб-сервер и вновь проверяем сайт.

strongssl5

Получена оценка “A+” теперь переходим к настройке безопасного соединения на ОС Centos 7.

Centos 7

Обновляем все пакеты до последней версии:

yum update

Для удобства установим пакет net-tools:

yum install net-tools

Добавим репозиторий epel:

yum install epel-release

Установим веб-сервер apache, mod_ssl и криптографический пакет openssl:

yum install openssl httpd mod_ssl

Проверяем версии apache и openssl:

httpd -v
Server version: Apache/2.4.6 (CentOS)
openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

Подключим к веб-серверу тестовый домен ukrnames.idua.org и подключим к нему SSL-сертификат , не затрагивая основных конфигураций веб-сервера относительно безопасного соединения.

Проверим качество работы безопасного соединения сайта ukrnames.idua.org с помощью сайта https://www.ssllabs.com/ssltest/analyze.html?d=ukrnames.idua.org

strongssl6

Как видно по изображению, дефолтные настройки для новой версии ОС и веб-сервера нужно так же настраивать.

Выполняем все те же действия, что и для CentOS6, единственным отличаем будет поле “SSLCipherSuite” , т.к. оно для версии Apache 2.4 содержит другие значения:

sed -i 's/SSLProtocol all -SSLv2/SSLProtocol all -SSLv2 -SSLv3/g' /etc/httpd/conf.d/ssl.conf
sed -i 's/SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA/SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH/g' /etc/httpd/conf.d/ssl.conf
service httpd restart

Проверяем подключен ли модуль headers:

 httpd -M | grep header
 headers_module (shared)

Модуль подключен. Теперь можно добавить в файл /etc/httpd/conf.d/ssl.conf строку :

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Перезагружаем веб-сервер и вновь проверяем сайт.

strongssl7

Оценка “А+”, чего мы и добивались.

Были рассмотрены Версии apache2.2 и apache2.4.

Для ОС Debian/Ubuntu так же актуальны данные действия по усилению безопасного соединения сайта, изменится только менеджер пакетов с “yum” на “apt” и расположение конфигурационных файлов веб-сервера с “/etc/httpd/” на  “/etc/apache2/”.

Поэтому рассматривать установку и конфигурацию данных ОС не будем.