Как вы, наверное, заметили, блог стал доступен по протоколу 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/