Einschaltung des Protokolls TLS 1.3 auf dem Server

19.03.2019 | Petra Alm

In der heutigen Anleitung demonstrieren wir uns die Vorgehensweise für die Einschaltung des Protokolls TLS 1.3 auf dem Webserver. Dieses neueste Protokoll für die verschlüsselte Kommunikation findet bei modernen Browsern bereits eine breite Unterstützung und es gibt keinen Grund dazu, ihm auszuweichen. Mit TLS 1.3 wird nämlich nicht nur die Sicherheit Ihrer Kunden erhöht, sondern auch die Geschwindigkeit der Verbindung.

Unterstützung des Protokolls TLS 1.3 auf Webservern

Damit auf dem Server TLS 1.3 eingeschaltet werden kann, muss diese Protokollversion von der Software unterstützt werden. Diese Bedingung ist vor der Konfigurationsanpassung zu überprüfen. Zum Datum der Veröffentlichung dieses Artikels sieht die Unterstützung folgendermaßen aus:

  • Linux-Server mit der OpenSSL-Bibliothek unterstützen das Protokoll TLS 1.3. Die Bedingung ist die OpenSSL in der Version 1.1.1.
    • Unterstützung direkt in der Distribution; Debian 9 testing, Ubuntu 18.10.
  • Bei dem Windows Server fehlt die Unterstützung von TLS 1.3 momentan noch

Die Unterstützung vonseiten Browsern ist bei den populärsten hervorragend. Sowohl Chrome als auch Firefox können mit dem Protokoll TLS 1.3 seit dem Jahre 2017 zusammenarbeiten und ihre Hersteller nutzen die Endversion des Standards, die völlig funktionsfähig ist. In der Unterstützung bleiben Microsoft und Apple zurück. Der erste hat die weitere Entwicklung seines Browsers schon aufgegeben und der zweite das Update für Safari bisher nicht herausgegeben.

Unterstützung von TLS 1.3 in Browsern

Unterstützung von TLS 1.3 in Browsern. Klicken Sie hier, um das Bild groß darzustellen

TLS 1.3 auf dem Server mit OpenSSL und Apache einschalten

Für die Demonstration wählen wir den typischen Linux Webserver aus. Das sich auf dem Server befindende Softwarepaket sollte über die erforderliche Version von OpenSSL in dem Repository verfügen. Dies wird Ihnen die Arbeit vereinfachen, denn sonst müssten Sie die höhere Version manuell installieren, was nicht empfehlenswert ist. In den aufgeführten Beispielen gehen wir von der Distribution Debian 9 aus (die Terminal-Befehle für den Server Ubuntu sollten nicht unterschiedlich sein, für andere Distributionen wählen Sie ein Äquivalent aus).

Die OpenSSL-Version auf dem Server feststellen

Um die OpenSSL-Version festzustellen, geben Sie in das Terminal das folgende ein:

openssl version

Und das Ergebnis wird Ihnen gleich angezeigt:

openSSL 1.1.1a 20 Nov 2018

Sollte die Version niedriger als 1.1.1 sein, muss sie upgegradet werden. Falls die Version auch für Ihre Distribution erreichbar ist können Sie schnell auf distrowatch.com feststellen, im Detail der Distribution, wo es die Übersicht der bekannten Pakete und ihre Versionen geben. Debian auf dem Testserver mussten wir für den Zweck der Überprüfung des TLS 1.3-Testes auf den Zweig Testing umschalten und nachfolgend upgraden.

Apache muss sich in der Version 2.4.36 oder höher befinden. Die Version des Pakets apache2 stellen wir gleich wir oben bei openssl fest.

Falls die Überprüfung der OpenSSL-Version positiv ist, können wir zu der Einstellung von Apache fortschreiten.

Apache und vhost einstellen

Apache hat die einzelnen Webs (Domains) in einzelnen als vhost genannten Dateien eingestellt. Auf Debian finden Sie sie in dem Pfad /etc/apache2/sites-available/domainname.conf.

Durch die Anpassung des vhost für das betreffende Web (sie lassen sich nach dem Namen erkennen) stellen Sie seine Parameter und auch direkt seine Absicherung ein, denn neben den Protokollen werden hier auch konkrete Verschlüsselungen zugelassen oder verboten.

Bei der richtigen Version von OpenSSL sollte Apache das Protokoll TLS 1.3 bereits als Default aktiviert haben. Dank der Anpassung der Direktive SSLProtocol verbieten wir aber zugleich die veralteten Protokolle TLS 1.0 und 1.1:

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1

Danach wird Apache nur die sicheren Protokolle TLS 1.2 und 1.3 nutzen. Beachten Sie bitte, dass die Einstellung von Protokollen bei allen vhosts gleich sein muss, sonst wird sich die Änderung nicht auswirken. Zuletzt starten Sie Apache neu:

service apache2 restart
Die ganze Konfigurationsdatei apache2 mit der Unterstützung PHP 7.3 (FPM) und HTTP/2 (klicken Sie hier, um sie anzuzeigen)

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
ProxyPassMatch ^/(.*.php(/.*)?)$ unix:/run/php/php7.3-fpm.sock|fcgi://localhost/var/www/server.cz/public_html

ServerAdmin webmaster@localhost
ServerName server.cz
ServerAlias www.server.cz
Protocols h2 h2c http/1.1
DocumentRoot /var/www/server.cz/public_html


Options FollowSymLinks
AllowOverride None


Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all


Options None
AllowOverride None
Require all granted
Order allow,deny
allow from all

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all

ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined

SSLEngine on
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite
"EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:CAMELLIA256-SHA:CAMELLIA128-SHA:DES-CBC3-SHA:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS"

SSLCertificateFile /etc/ssl/server/certifikat.pem
SSLCertificateKeyFile /etc/ssl/server/privatni.key
#SSLCertificateChainFile /etc/ssl/server/chain.pem

TLS 1.3 auf Nginx einschalten

Nginx ist ein populärer Rivale von Apache und in der Anzahl der aktiven Webs steht ihm nicht nach. Nginx wird in der Datei /etc/nginx/nginx.conf. konfiguriert. Für unseren Zweck - eingeschaltetes TLS 1.3 - benötigen wir minimal die Version 1.13 und OpenSSL wieder in der Version 1.1.1 und höher (wir raten Ihnen dazu, sich auf die Verwalter ihrer Distribution zu verlassen und eventuell auf das Update zu warten, sonst werden beide Pakete aus dem Quellcode erstellt werden müssen).

Öffnen Sie die Konfigurationsdatei und die Direktive ssl_protocols ergänzen Sie um TLS v 1.3 (eventuell schreiben Sie die ganze Zeile ein):

ssl_protocols TLSv1.2 TLSv1.3;

In die Direktive ssl_ciphers, die eine Liste der zugelassenen und mit einem Doppelpunkt getrennten Direktiven enthält, ergänzen Sie auf den Anfang die folgenden Verschlüsselungen für TLS 1.3: TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256.

Nachfolgend testen Sie die Konfiguration mit:

nginx -t

Falls der Test erfolgreich ist (test is successful), beudetet dass, dass TLS 1.3 von dem Server unterstützt ist und alles in Ordnung ist. Sollten Sie demgegenüber die Antwort invalid value "TLSv1.3" erhalten, unterstützt Nginx das Protokoll entweder nicht, oder das Problem befindet sich in der Bibliothek OpenSSL.

Die ganze Konfigurationsdatei Nginx mit der Unterstützung von PHP und HTTP/2 (klicken Sie hier, um sie anzuzeigen). server {
listen 80 default_server;
listen [::]:80 default_server;

# SSL configuration
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/ssl/certifikat.pem;
ssl_certificate_key /etc/ssl/certifikat.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHAC$
ssl_prefer_server_ciphers on;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

server_name server.cz;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

# pass PHP scripts to FastCGI server
#
location ~ .php$ {
include snippets/fastcgi-php.conf;

# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
# With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /.ht {
deny all;
}
}

Überprüfung des Ergebnisses

Falls auf Ihrem Webserver das Protokoll TLS 1.3 erfolgreich eingeschaltet worden ist, können Sie einfach praktisch überprüfen. Rufen Sie Ihr Web im Browser auf und suchen Sie Details der Verbindung aus. Es wird Ihnen auch das genutzte TLS-Protokoll angezeigt.

Für einen externen Test können Sie das Tool TLS-Checker nutzen, oder den mehr detaillierten (aber auch langsameren) Test von SSLlabs. Dieser wird die gesamte Sicherheit des Servers überprüfen, welche neben dem unterstützten Protokoll auch die angewandten Verschlüsselungen (siehe den folgenden Abschnitt) bestimmen.

Bonus: Einstellung von Verschlüsselungen (Ciphersuites)

Bei der Überprüfung der Apache-Einstellung empfehlen wir auch die Liste der genutzten Verschlüsselungen zu überprüfen. Diese werden in der Direktive SSLCipherSuite aufgeführt.

Am schnellsten ist das Web auf SSLlabs.com analysieren zu lassen. Sollte der Test Vorbehalte gegen die genutzten Verschlüsselungen (Ciphersuites) haben, verbieten Sie die veralteten manuell, oder kopieren Sie die richtige Einstellung der Verschlüsselungen nach dem Tool Mozilla SSL Configuration Generator oder cipherli.st.

 


Petra Alm
Spezialistin für TLS-Zertifikate
DigiCert TLS/SSL Professional
e-mail: info(at)sslmarket.de