HTTP/2.0 ist im Apache unter Ubuntu 16.04 noch nicht enthalten, ebenfalls lässt curl bzw. libcurl die HTTP/2.0 Unterstützung vermissen. Im nginx ist sie dagegen enthalten.
:~# apt-get install nginx :~# nginx -v nginx version: nginx/1.10.0 (Ubuntu) :~# nginx -V --with-http_v2_module
Für HTTP/2.0 ist ein SSL Zertifikat nötig. Für die schnellen ersten Schritte ist ein self-signed Zertifikat ausreichend.
:~# mkdir /etc/nginx/ssl :~# cd /etc/nginx/ssl :~# SERVER=localhost :~# openssl genrsa -out $SERVER.nopasskey 2048 :~# chmod 600 $SERVER.nopasskey :~# openssl req -new -key $SERVER.nopasskey -out $SERVER.csr :~# openssl x509 -req -days 1825 -in $SERVER.csr -signkey $SERVER.nopasskey -out $SERVER.crt
Hier nur die nötigsten Änderungen der nginx Konfiguration.
:~# vim /etc/nginx/sites-available/default listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; ssl_certificate /etc/nginx/ssl/localhost.crt; ssl_certificate_key /etc/nginx/ssl/localhost.nopasskey; server_name localhost;
:~# vim /etc/nginx/nginx.conf ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; # die einschränkende ciphers list ist wichtig :~# service nginx restart
Im Firefox mit eingeschalteten Web-Entwickler Werkzeugen und Abnicken aller Sicherheitswarnungen wegen dem eingesetzten self-signed Zertifikat, wird die Verbindung mit Version HTTP/2.0 angezeigt.
Trotz passender Version bringen curl bzw. libcurl unter Ubuntu 16.04 keinen HTTP/2.0 Support mit.
:~# curl -I -k --http2 https://localhost curl: (1) Unsupported protocol :~# curl --version curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets
Der gleiche version Aufruf unter einem aktuellen Kali-Linux. Hier gibt es in curl bzw. libcurl die HTTP/2.0 Unterstützung.
:~# curl --version curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.5.2 zlib/1.2.8 libidn/1.33 libssh2/1.7.0 nghttp2/1.13.0 librtmp/2.3 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets
Der http2 Aufruf mit curl vom entfernten Kali-Linux über das Netzwerk.
:~# curl -I -k --http2 https://192.168.56.5 HTTP/2.0 200 server:nginx/1.10.0 (Ubuntu) date:Mon, 08 Aug 2016 13:29:18 GMT content-type:text/html content-length:100 last-modified:Mon, 11 Jul 2016 10:18:45 GMT etag:"57837285-64" accept-ranges:bytes
Unter Ubuntu 16.04 steht nghttp zur Verfügung, mit dem HTTP/2.0 Verbindungen getestet werden können.
:~# apt-get install nghttp2-client :~# nghttp -v https://localhost [ 0.000] Connected The negotiated protocol: h2 [...]