форсируем ssl с hsts


Как вы, наверное, заметили, блог стал доступен по протоколу SSL. Сертификат был получен совершенно бесплатно у StartSSL. Сейчас появилось несколько способов заполучить халявный доверенный SSL сертификат. Например, Cloudflare дает SSL доступ всем желающим пользователям с помощью технологии Universal SSL Еще один способ пока еще в стадии разработки, но уже успел нашуметь в среде IT. Это, так называемая инициатива Let’s Encrypt. Но разговор сейчас зайдет не о получении SSL, а о способе обезопасить SSL соединение от MITM атак.

Есть такая технология HSTS, предложенная Paypal для форсирования SSL соединений. Принцип заключается в отправке клиенту специального заголовка (header), который требует установки защищенного соединения. Зачастую, сайты работают и по http и по https протоколам, поэтому есть возможность перенаправить клиента на http версию сайта, чтобы слушать его трафик. HSTS предотвращяет эту атаку.

Современные браузеры Chrome, Firefox и их деривативы поддерживают заголовки HSTS, а те, что не поддерживают, просто игнорируют их, так что можно не беспокоиться о проблемах на стороне клиента при использовании HSTS. На примере этого блога покажу, как включить HSTS для nginx. Собственно правим конфиг nginx своего сайта (тот, который лежит в /etc/nginx/sites-enabled).

server {
  # SSL config
  listen 443;
  listen [::]:443 ipv6only=on;
  ssl on;
  ssl_certificate /home/www/hugo-blog/prolinux_chain.pem;
  ssl_certificate_key /home/www/hugo-blog/prolinux_startssl_dec.key;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  # HSTS enabled
  add_header Strict-Transport-Security 'max-age=604800';
  ## end SSL

Строчка, включающая HSTS, начинается с add_header. max-age уведомляет клиента, насколько долго сайт должен работать только в режиме https.

Напоследок видео, о том, как работает HSTS

Литература: http://linux-audit.com/configure-hsts-http-strict-transport-security-apache-nginx/

comments powered by Disqus