Укрепване на HTTPS сигурността в nginx - Официален сайт на екипа на EasyCoding

Официален сайт на екипа на EasyCoding: статии, HOWTO, програми и програмиране.

В тази статия ще разгледаме как да засилим значително HTTPS защитата, като използваме примера на уеб сървър nginx, конфигуриран като интерфейс.

Можете да проверите работата на SSL/TLS на сървъра с помощта на специализиран ресурс. Идентифицират се слаби, несигурни и анонимни шифри, както и уязвимости към атаки като Heartbleed, Poodle и др.

При настройките по подразбиране на nginx тестерът показва F (ужасно). След нашата настройка ще бъде A + (отлично).

Деактивирайте остарелите протоколи

От съображения за сигурност трябва напълно да деактивирате наследените протоколи: SSLv2 и особено SSLv3, който отдавна е податлив на атаката на Пудел.

Позволете само TLS версии 1.0, 1.1 и 1.2 в конфигурацията на nginx:

Редът няма значение, тъй като браузърите самостоятелно ще изберат един от разрешените протоколи според настройките и предпочитанията на потребителя.

Включете механизма TLS-FALLBACK-SCSV

Този механизъм предотвратява отслабването на криптирането чрез превключване към уязвим SSL. Механизмът се появи във всички нови версии на библиотеката openssl, така че трябва да бъде актуализиран:

  • OpenSSL 1.0.1 до версия 1.0.1j и по-нова;
  • OpenSSL 1.0.0 до версия 1.0.0o и по-нова;
  • OpenSSL 0.9.8 до 0.9.8zc и по-висока.

Деактивирайте несигурните и анонимни шифри

От съображения за сигурност е необходимо да деактивирате всички несигурни (наследствени и анонимни), както и слаби криптиращи шифри.

Ако трябва да осигурите съвместимост само с модерни браузъри (Firefox 24+, Chrome/Chromium 32+), напишете в конфигурацията на nginx:

Ако се нуждаете и от поддръжка за клиенти с по-стари браузъри (IE7 +, Firefox 3.x, Opera 12.x), напишете този ред вместо предишния:

Сега нека позволим използването само на зададените от нас шифри:

Линейна поръчка ssl_ciphers има значение: колкото по-близо е до началото, толкова по-висок е неговият приоритет. Ако клиентът няма разрешени шифри на сървъра, последният ще затвори връзката с него.

Включете механизма Forward Secrecy

Принципът на действие на този механизъм е съвсем прост: клиентът и сървърът обменят специални еднократни ключове по време на ръкостискането на TLS, които се унищожават в края на сесията на TLS или чрез изчакване. Механизмът на Diffie-Hellman се използва за обмен на ключове. Полученият по този начин ключ се използва за криптиране на данни, предадени в двете посоки.

Дори ако нападателят може да открадне частния ключ на сървъра, той няма да може да дешифрира предишния TLS трафик, тъй като частният ключ на сървъра се използва само за подписване на DH ръкостискане.

Индивидуалните ключове на сесията на клиента и сървъра не ги напускат и не могат да бъдат получени чрез MITM атаки при никакви условия.

Уеб сървърът nginx от версия 1.4.4 вече използва механизма Diffie-Hellman за обмен на ключове, но дължината на ключа е само 1024 бита, което е много малко според съвременните стандарти. Трябва да генерираме свой собствен с дължина на ключа 4096 бита:

Процесът ще отнеме много време поради събирането на допълнителна ентропия и на изхода ще получим файл dhparam.pem. Сега трябва да го активираме в конфигурацията на nginx:

Активиране на HTTP строга транспортна сигурност

Разширението HTTP Strict Transport Security е предназначено да запази настройката в браузъра „този сайт работи само чрез HTTPS“.

Атакуването на такъв ресурс с помощта на "човек в средата" (MITM) вече няма да работи, защото в случай на заместване на сертификат, браузърът незабавно ще затвори връзката и ще ви попречи да продължите да работите с фалшивия сертификат.

Нека активираме поддръжката на HSTS:

В параметъра максимална възраст указва колко секунди трябва да се кешира заглавката на HSTS в браузъра. Препоръчително е да се посочи 31536000 (1 година) и по-горе.