SSL HTTP/2 und Nginx

HTTP/2 bei Nginx einsetzen

(2 minutes read)

Da nun Nginx mit Version 1.9.5 auch ein HTTP/2 Modul besitzt, ist es an der Zeit das zu nutzen und entsprechend zu kompilieren. Den Sourcecode kann man von http://nginx.org/en/download.html herunterladen.

Wichtig ist, dass man beim kompilieren den Parameter –with-http_v2_module mitgibt. Beispiel:

--prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --without-http_browser_module --without-http_geo_module --without-http_limit_req_module --without-http_limit_conn_module --without-http_memcached_module --without-http_referer_module --without-http_scgi_module --without-http_split_clients_module --without-http_ssi_module --without-http_userid_module --without-http_uwsgi_module --with-http_v2_module

Anschließend wird kompiliert und entsprechend installiert.

Um uns vor BEAST, FREAK, Logjam, Heartbleed, CRIME und Poodle Attacken zu schützen sind einige Einstellungen nötig. Die Cipher Suites, die Perfect Forward Secrecy bereitstellen, sind solche, die eine ephemere Form des Diffie-Hellman-Schlüsselaustausch verwenden. Ihr Nachteil ist ihr Overhead, der durch Verwendung der elliptischen Kurven entsteht.

server {
# ssl http2 aktivieren SSL und HTTP/2 Support
listen 443 default_server ssl http2;
listen [::]:443 default_server ssl http2;

root /var/www;
index index.html index.htm index.php;

server_name localhost;

# das SSL Zertifikat und der private Schlüssel
ssl on;
ssl_certificate /etc/ssl/nginx/server.crt;
ssl_certificate_key /etc/ssl/nginx/server.key;

# wir generieren unsere eigenen DHE Parameter: openssl dhparam -out dhparam.pem 2048
ssl_dhparam /etc/ssl/nginx/dhparam.pem;
ssl_ecdh_curve secp384r1;

# Wir untersützen nur noch TLS*
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:EECDH:EDH:!MD5:!RC4:!LOW:!MEDIUM:!CAMELLIA:!ECDSA:!DES:!DSS:!3DES:!NULL;

# SSL Sessions
ssl_session_timeout 5m;
ssl_session_cache builtin:1000 shared:SSL:10m;

# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;

# CA Cert. für OCSP stapling
ssl_trusted_certificate /etc/nginx/ssl/ca.pem;
resolver 208.67.222.222 208.67.220.220 valid=300s;
resolver_timeout 10s;

# HTST um dem Client zu sagen das er immer SSL benutzen soll
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
....