GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So aktivieren Sie SSL/TLS Perfect Forward Secrecy in Apache oder Nginx

Dieser Artikel bietet einen Überblick über Perfect Forward Secrecy (PFS) und wie man es auf Apache®- oder Nginx®-Webservern aktiviert.

Was ist PFS?

PFS schützt Daten, die zwischen dem Client und dem Server ausgetauscht werden, selbst wenn der private Schlüssel kompromittiert ist. Sie können dies erreichen, indem Sie für jede durchgeführte Transaktion einen Sitzungsschlüssel generieren.

Warum PFS auf einer Website implementieren?

Ein TLS- oder SSL-Zertifikat funktioniert mit einem öffentlichen Schlüssel und einem privaten Schlüssel. Wenn der Webbrowser und der Server Schlüssel austauschen, erstellt das System einen Sitzungsschlüssel mithilfe eines Schlüsselaustauschmechanismus namens RSA, bei dem alle Informationen zwischen dem Client und dem Server verschlüsselt werden. RSA erstellt eine Verknüpfung zwischen dem privaten Schlüssel des Servers und dem Sitzungsschlüssel, der für jede Uniquesecure-Sitzung erstellt wird.

Die Sitzung kann einem Brute-Force-Angriff ausgesetzt werden – dies besteht aus einem Angriff, der dem Server Kombinationen von Sicherheitsschlüsseln injiziert, bis er den richtigen findet. Auch wenn dieser Vorgang lange dauern kann, kann der Angreifer, wenn der private Schlüssel des Servers kompromittiert wird, sowohl die Sitzungsdaten als auch alle Client-Transaktionen einsehen.

Wie PFS eine Website schützt

PFS ermöglicht es dem Server, sich nicht auf einen einzigen Sitzungsschlüssel zu verlassen. Anstatt immer denselben Verschlüsselungsschlüssel zu verwenden, wenn ein Benutzer oder Dienst eine Verbindung herstellt, generiert PFS einen eindeutigen Sitzungsschlüssel für jede Verbindung.

Aktivieren Sie PFS mithilfe von Austauschmechanismen – Ephemeral Diffie-Hellman (DHE) und Elliptic Curve Diffie-Hellman (ECDHE) . Wenn die Angreifer den Sitzungsschlüssel brutal erzwingen, können sie nur die Informationen aus dieser einen Sitzung entschlüsseln und nicht aus den anderen.

Anforderungen zur Implementierung von PFS in einem Webserver

Verwenden Sie eines der folgenden Tools, um PFS zu implementieren:

  • OpenSSL 1.0.1c+
  • Apache 2.4 oder
  • Nginx 1.0.6+ und 1.1.0+

Sie können die Versionen dieser Pakete überprüfen, indem Sie die folgenden Befehle ausführen:

Hinweis :Die Ergebnisse können variieren, wenn die Anbieter neue Versionen veröffentlichen.

[root@rackspace-test ~]$ openssl version
OpenSSL 1.1.1g FIPS  21 Apr 2020

[root@rackspace-test ~]$ httpd -v
Server version: Apache/2.4.37 (centos)
Server built:   Nov  4 2020 03:20:37

Für Server mit Debian®- oder Ubuntu®-Betriebssystemen lautet der Befehl apache2ctl -v .

[root@rackspace-test ~]$ nginx -v
nginx version: nginx/1.14.1

SSL-Protokollkonfiguration

Überprüfen Sie, welche Websites SSL implementiert haben, indem Sie die Befehle in den folgenden Abschnitten ausführen.

Diese Beispiele implementieren PFS in einer Domäne namens example.com .

Apache-Anweisungen

Es gibt zwei Möglichkeiten, um zu überprüfen, welche Websites über ein SSL-Zertifikat verfügen:

[root@rackspace-test ~]# grep -ir "SSLEngine" /etc/httpd/
/etc/httpd/conf.d/example.com.conf:     SSLEngine on

Hinweis: Der Standardpfad für Apache Virtual Hosts befindet sich im Verzeichnis /etc/httpd/conf.d/ . Verzeichnisse können je nach Konfiguration variieren.

Oder Sie können die Befehle httpd -S verwenden oder apachectl -S für CentOS ® oder RedHat® Enterprise Linux ® (RHEL) und apache2ctl -S für Debian- oder Ubuntu-Betriebssysteme.

[root@rackspace-test ~]# httpd -S | grep 443
*:443                  is a NameVirtualHost
     port 443 namevhost www.example.com (/etc/httpd/conf.d/example.com.conf:10)

Fügen Sie mit Ihrem bevorzugten Texteditor die folgenden Parameter zur vhost-Konfiguration hinzu:

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"

Wenn Sie nach dem Wort SSL suchen im vhost sollte die Ausgabe nach der Implementierung etwa so aussehen:

[root@rackspace-test ~]# egrep 'SSL' /etc/httpd/conf.d/example.com.conf
     SSLEngine on
     SSLProtocol all -SSLv2 -SSLv3
     SSLHonorCipherOrder on
     SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
     SSLCertificateFile       /etc/ssl/certs/2022-example.com.crt
     SSLCertificateKeyFile    /etc/ssl/private/2022-example.com.key

Stellen Sie sicher, dass die Syntax korrekt ist, und starten Sie Apache neu.

[root@rackspace-test ~]# httpd -t
Syntax OK
[root@rackspace-test ~]# apachectl -k restart
Nginx-Anweisungen

Listen Sie die Websites auf, auf denen ein SSL-Zertifikat installiert ist:

[root@rackspace-test ~]# egrep -ir 'SSL' /etc/nginx/conf.d/
/etc/nginx/conf.d/example.com.conf:        listen 443 ssl;
/etc/nginx/conf.d/example.com.conf:        ssl_certificate       /etc/ssl/certs/2022-example.com.chained.crt;
/etc/nginx/conf.d/example.com.conf:        ssl_certificate_key   /etc/ssl/private/2022-example.com.key;

Hinweis: Der Standardpfad für Nginx-Blöcke befindet sich im Verzeichnis/etc/nginx/conf.d/ . Verzeichnisse können je nach Konfiguration variieren.

Fügen Sie mit Ihrem bevorzugten Texteditor die folgenden Parameter zur vhost-Konfiguration hinzu:

ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";

Wenn Sie nach dem Wort SSL suchen im vhost sollte die Ausgabe nach der Implementierung etwa so aussehen:

[root@racksapce-test ~]# egrep -ir 'SSL' /etc/nginx/conf.d/example.com.conf
     listen          443 ssl;
     ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
     ssl_prefer_server_ciphers on;
     ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
     ssl_certificate         /etc/ssl/certs/2022-example.com.chained.crt;
     ssl_certificate_key     /etc/ssl/private/2022-example.com.key;

Stellen Sie sicher, dass die Syntax korrekt ist, und starten Sie Nginx neu.

[root@rackspace-test ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@rackspace-test ~]# nginx -s reload

Mit den vorangegangenen Schritten können Sie PFS korrekt für Ihre Websites implementieren.

Verwenden Sie die Registerkarte „Feedback“, um Kommentare abzugeben oder Fragen zu stellen. Sie können auch mit uns ins Gespräch kommen.


Linux
  1. Was ist NGINX? Wie funktioniert es?

  2. So aktivieren Sie HTTP2 in NGINX

  3. So aktivieren Sie die HSTS-Richtlinie (HTTP Strict Transport Security) in Nginx und Apache

  4. CentOS / RHEL:So aktivieren Sie SSL für Apache

  5. Berechtigungen für SSL-Schlüssel?

So aktivieren Sie TLS 1.3 in Nginx unter Ubuntu 18.04 und 16.04

Wie aktiviere ich IPv6 in Nginx?

So aktivieren Sie die GZIP-Komprimierung in Nginx

So installieren Sie Nginx mit Let’s Encrypt TLS/SSL unter Ubuntu 20.04

So aktivieren Sie TLS 1.3 auf Apache und Nginx

So überprüfen Sie das SSL-Ablaufdatum auf Plesk