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

So installieren Sie Nginx mit Lets encrypt und erhalten A+ von SSLLabs Test

In diesem Tutorial zeige ich Ihnen Schritt für Schritt, wie Sie den Nginx-Webserver mit Letsencrypt-Zertifikat installieren und konfigurieren. In diesem Handbuch erfahren Sie, wie Sie den Nginx-Webserver installieren, das Let's-Encrypt-Tool installieren, ein SSL-Zertifikat für Lets Encrypt generieren, den virtuellen Nginx-Host mit SSL konfigurieren und eine zusätzliche SSL-Konfiguration erstellen, um das A+ von den SSL-Test-SSL-Labs zu erhalten.

Voraussetzungen

  • Linux-Server – Ubuntu 18.04 oder CentOS 7.5
  • Root-Rechte

Was werden wir tun?

  1. Nginx-Webserver installieren
  2. Firewall-UFW/Firewalld konfigurieren
  3. Installieren Sie let's encrypt und generieren Sie ein SSL-Zertifikat
  4. Sicheres SSL konfigurieren
  5. Konfigurieren Sie den virtuellen Nginx-Host mit SSL
  6. Testen

Schritt 1 – Nginx-Webserver installieren

In diesem Tutorial führen wir Sie durch die Installation und Konfiguration des Nginx-Webservers mit Letsencrypt auf beiden Linux-Servern – Ubuntu 18.04 und CentOS 7.5.

Auf Ubuntu 18.04.

Aktualisieren Sie das Repository und installieren Sie dann nginx mit dem folgenden apt-Befehl.

sudo apt update
sudo apt install nginx -y

Unter CentOS 7.5.

Installieren Sie das EPEL-Repository auf dem CentOS-System und installieren Sie Nginx mit dem Befehl yum.

sudo yum install epel-release -y
sudo yum install nginx -y

Starten Sie nach Abschluss der Installation den Nginx-Dienst und aktivieren Sie ihn so, dass er jedes Mal beim Systemstart gestartet wird.

systemctl start nginx
systemctl enable nginx

Der Nginx-Webserver ist jetzt installiert und läuft auf dem Standard-HTTP-Port 80. Überprüfen Sie ihn mit dem unten stehenden netstat-Befehl.

netstat -plntu

Schritt 2 – Firewall UFW konfigurieren – Firewalld

Es wird empfohlen, die Firewall auf dem Server einzuschalten und den spezifischen Port nach Bedarf zu öffnen. In diesem Schritt zeigen wir, wie Sie SSH-, HTTP- und HTTPS-Ports auf Linux-Servern Ubuntu 18.04 mit UFW-Firewall und Firewalld auf einem CentOS 7.5-System öffnen.

Unter Ubuntu 18.04 - UFW-Firewall

Stellen Sie vor dem Aktivieren der UFW-Firewall auf einem Ubuntu-System sicher, dass der SSH-Port in der Liste Firewall-Konfiguration aktiviert ist.

Fügen Sie den SSH-Dienst-Port mit dem Befehl ufw zur Firewall-Konfiguration hinzu und aktivieren Sie dann den UFW-Firewall-Dienst.

ufw allow ssh
ufw enable

Fügen Sie nun die HTTP- und HTTPS-Dienste hinzu.

ufw allow http
ufw allow https

Die SSH-, HTTP- und HTTPS-Dienstports wurden der UFW-Firewall-Dienstliste hinzugefügt. Überprüfen Sie dies mit dem folgenden Befehl.

ufw status

Unter CentOS 7.5 - Firewalld

Stellen Sie vor dem Hinzufügen von Ports und Diensten zu firewelld sicher, dass der Firewalld-Dienst aktiv ist und ausgeführt wird.

Starten Sie den Dienst firewalld und aktivieren Sie ihn so, dass er jedes Mal beim Systemstart gestartet wird.

systemctl start firewalld
systemctl enable firewalld

Hinweis:

  • Der SSH-Dienst wird standardmäßig in der Firewald-Dienstliste aktiviert.

Fügen Sie nun die HTTP- und HTTPS-Dienste mit dem Befehl firewall-cmd unten hinzu.

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent

Laden Sie die Firewall-Konfiguration neu und überprüfen Sie die Dienstliste.

firewall-cmd --reload
firewall-cmd --list-services

Und Sie erhalten die SSH-, HTTP- und HTTPS-Dienste auf der Liste.

Schritt 3 – Letsencrypt installieren und Zertifikate generieren

In diesem Schritt installieren wir das Letsencrypt-Tool und generieren die starken SSL-Zertifikate Letsencrypt mit dem Befehl cerbot.

Auf Ubuntu 18.04

Installieren Sie die letsencrypt-Pakete mit dem folgenden apt-Befehl.

sudo apt install letsencrypt -y

Auf CentOS 7.5

Installieren Sie nun die letsencrypt-Pakete auf CentOS 7 mit dem folgenden Befehl yum.

sudo yum install certbot -y

Nachdem die Installation abgeschlossen ist, erstellen wir eine neue Konfiguration, die zum Generieren von SSL-Zertifikatsdateien verwendet wird.

Auf Ubuntu 18.04

Gehen Sie in das Konfigurationsverzeichnis „/etc/nginx“ und erstellen Sie eine neue Konfigurationsdatei „cerbot.conf“ im Verzeichnis „snippets“.

cd /etc/nginx/
vim snippets/certbot.conf

Fügen Sie dort die folgende Konfiguration ein.

    location /.well-known {
        alias /var/www/html/.well-known;
    }

Speichern und beenden.

Bearbeiten Sie nun die standardmäßige virtuelle Nginx-Hostdatei.

vim sites-available/default

Fügen Sie die folgende Konfiguration unter den 'Server {..}'-Blöcken hinzu.

    include snippets/certbot.conf;

Speichern und beenden.

Auf CentOS 7.5

Gehen Sie in das Konfigurationsverzeichnis „/etc/nginx“ und erstellen Sie eine neue Konfigurationsdatei „certbot.conf“ im Verzeichnis „default.d“.

cd /etc/nginx/
vim default.d/certbot.conf

Konfiguration unten einfügen.

    location /.well-known {
        alias /usr/share/nginx/html/.well-known;
    }

Speichern und beenden.

Testen Sie nun die nginx-Konfiguration und stellen Sie sicher, dass kein Fehler vorliegt, und starten Sie dann den nginx-Dienst neu.

nginx -t
systemctl restart nginx

Generieren Sie als Nächstes die SSL-Letsencrypt-Zertifikate mit dem Befehl certbot.

Auf Ubuntu 18.04

certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email [email protected] -w /var/www/html -d hakase-labs.io

Auf CentOS 7.5

certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email [email protected] -w /usr/share/nginx/html -d hakase-labs.io

Hinweis:

  • Wir werden die RSA-Schlüsselgröße für unsere Domäne auf „4096“ festlegen und wir werden die Authentifizierungsmethode auf das standardmäßige Web-Root-Verzeichnis „/var/www/html“ auf dem Ubuntu-System und „/usr/share/“ festlegen. nginx/html'-Verzeichnis für das CentOS 7-System.

Wenn der Vorgang abgeschlossen ist, erhalten Sie alle SSL-Zertifikatsdateien für den Domänennamen im Verzeichnis „/etc/letsencrypt/live“.

Um eine zusätzliche Sicherheit zu erhalten, generieren wir den DHPARAM-Schlüssel '4096' mit dem OpenSSL-Befehl wie unten gezeigt.

openssl dhparam -out /etc/nginx/dhparam.pem 4096

Der DHPARAM-Schlüssel wurde im Verzeichnis „/etc/nginx“ generiert.

Schritt 4 - SSL-Konfiguration

In diesem Schritt definieren wir die SSL-Konfiguration für den Nginx-Webserver. Wir werden eine neue Konfiguration „ssl.conf“ erstellen, die eine optimierte SSL-Konfigurationssicherheit enthält, die auf den Nginx-Webserver ausgerichtet ist.

Auf Ubuntu 18.04

Gehen Sie zum Konfigurationsverzeichnis „/etc/nginx/“ und erstellen Sie eine neue SSL-Konfiguration „ssl.conf“ im Verzeichnis „snippets“.

cd /etc/nginx/
vim snippets/ssl.conf

Auf CentOS 7.5

Gehen Sie zum Konfigurationsverzeichnis „/etc/nginx/“ und erstellen Sie eine neue SSL-Konfiguration „ssl/conf“ im Verzeichnis „default.d“.

cd /etc/nginx/
vim default.d/ssl.conf

Fügen Sie dort die folgende SSL-Konfiguration ein.

# Specify the TLS versions
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

# Ciphersuites recommendation from the chiper.li
# Use this chipersuites to get 100 points of the SSLabs test
# Some device will not support
#ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384";

# Mozilla Ciphersuits Recommendation
# Use this for all devices supports
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';

# Use the DHPARAM key and ECDH curve >= 256bit
ssl_ecdh_curve secp384r1;
ssl_dhparam /etc/nginx/dhparam.pem;

server_tokens off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

# Enable HTTP Strict-Transport-Security
# If you have a subdomain of your site,
# be carefull to use the 'includeSubdomains' options
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

# Enable OSCP Stapling for Nginx web server
# If you're using the SSL from Letsencrypt,
# use the 'chain.pem' certificate
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/hakase-labs.io/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

# XSS Protection for Nginx web server
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
add_header X-Robots-Tag none;

Speichern und beenden.

Hinweis:

  • Geben Sie die TLS-Versionen für die Website an, akzeptieren Sie nur TLSv1 TLSv1.1 TLSv1.2.
  • Geben Sie die SSL-Verschlüsselungssammlung an, und es wird empfohlen, die SSL-Verschlüsselungssammlung des Mozilla-Vorschlags zu verwenden, um die Kompatibilität mit allen Geräten zu erhalten.
  • Aktivieren Sie HSTS, OSCP Heften und fügen Sie den XSS-Schutz hinzu.

Schritt 5 – Konfigurieren Sie den virtuellen Nginx-Host mit SSL

In diesem Schritt erstellen wir eine virtuelle Hostdatei für den Domänennamen. Wir erstellen einen neuen virtuellen Host, eine Domain mit dem Namen hakase-labs.io, und sein Webstammverzeichnis befindet sich im Verzeichnis „/var/www/site01“.

Erstellen Sie das neue Verzeichnis „/var/www/site01“ und erstellen Sie darin die Datei „index.html“.

mkdir -p /var/www/site01
echo '<h1><center>Nginx - Letsencrypt - A+</center></h1>' > /var/www/site01/index.html

Gehen Sie nun in das Konfigurationsverzeichnis „/etc/nginx“ und erstellen Sie eine neue virtuelle Hostdatei mit dem Namen „hakase-labs.io“ für Ubuntu und „hakase-labs.conf“ für das CentOS 7-System.

Auf Ubuntu 18.04

cd /etc/nginx/
vim sites-available/hakase-labs.io

Auf CentOS 7.5

cd /etc/nginx/
vim conf.d/hakase-labs.conf

Fügen Sie dort die folgende Beispielkonfiguration für einen virtuellen Nginx-Host ein.

server {
    listen 80;
    listen [::]:80;
    server_name hakase-labs.io;

    return 301 https://$host$request_uri;
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

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

        server_name  hakase-labs.io;
        error_log /var/log/nginx/hakase-error.log warn;

        ssl_certificate /etc/letsencrypt/live/hakase-labs.io/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/hakase-labs.io/privkey.pem;

        #SSL Configuration
        include snippets/ssl.conf;

        location ~ /.well-known {
                allow all;
        }


        location / {
            try_files $uri $uri/ =404;
        }


        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }

}

Speichern und beenden.

Hinweis:

  • Ändern Sie die 'include snippets/ssl.conf;' Linie. Wenn Sie Ubuntu verwenden, lassen Sie es standardmäßig. Und wenn Sie CentOS verwenden, ändern Sie das Verzeichnis in „default.d/ssl.conf“

Nur auf Ubuntu-System

Aktivieren Sie die neue virtuelle Hostdatei, testen Sie die Konfiguration und vergewissern Sie sich, dass kein Fehler vorliegt.

ln -s /etc/nginx/sites-available/hakase-labs.io /etc/nginx/sites-enabled/
nginx -t

Starten Sie nun den nginx-Dienst neu.

systemctl restart nginx

Der neue virtuelle Host mit aktiviertem HTTPS und einer zusätzlichen SSL-Konfiguration wurde erstellt.

Überprüfen Sie dies mit dem Befehl netstat und Sie erhalten den HTTPS-Port 443 in der Liste.

netstat -plntu

Schritt 6 – Testen

Öffnen Sie Ihren Webbrowser und geben Sie den Namen Ihrer Domain ein, meiner ist „http://hakase-labs.io“.

Und Sie werden auf die HTTPS-Verbindung umgeleitet.

Gehen Sie jetzt zur SSL-Testseite 'https://www.ssllabs.com/ssltest/' und geben Sie Ihren eigenen Domänennamen ein und warten Sie dann, bis Sie die Ergebnisse erhalten.

Das Folgende ist mein Ergebnis der Verwendung der 'Mozilla Ciphersuite Recommendation'.

Und das Folgende ist mein Ergebnis der Verwendung der 'Cipher.li Ciphersuite Recommendation'.

Sie werden sehen, dass alle Ergebnisse 'A+'-Ergebnisse haben und sich nur in der 'Verschlüsselungsstärke' der Mozilla-Empfehlungen und der Cipherli.st-Empfehlung unterscheiden.

Um das OSCP-Heften und das HSTS auf dem Server zu überprüfen, scrollen Sie auf der Testergebnisseite und Sie erhalten das unten gezeigte Ergebnis.

Wenn Sie das OSCP-Heften von der Befehlszeile aus überprüfen möchten, überprüfen Sie es mit dem folgenden Befehl.

echo QUIT | openssl s_client -connect hakase-labs.io:443 -status 2> /dev/null | grep -A 17 'OCSP response:' | grep -B 17 'Next Update'

Überprüfen Sie den HSTS-Test mit dem unten stehenden Curl-Befehl.

curl -s -D- https://hakase-labs.io | grep -i Strict

Die Installation und Konfiguration des Nginx-Webservers mit SSL Letsencrypt sowie das Erhalten des A+ aus dem SSLabs-Test wurden erfolgreich abgeschlossen.

Referenzen

  • https://community.letsencrypt.org/
  • https://mozilla.github.io/
  • https://cipherli.st/

Linux
  1. So installieren Sie Nextcloud mit Nginx und Lets Encrypt SSL unter Ubuntu 20.04 LTS

  2. So installieren Sie Magento 2 mit Nginx und Lets Encrypt SSL unter Ubuntu 20.04 LTS

  3. So installieren Sie Shopware mit NGINX und Lets encrypt auf Ubuntu 18.04 LTS

  4. So installieren Sie Shopware mit NGINX und Lets Encrypt unter CentOS 7

  5. So installieren Sie Shopware mit NGINX und Lets Encrypt auf Fedora 30

So installieren Sie Drupal 9 mit Nginx und Lets Encrypt SSL unter Debian 10

So installieren Sie Shopware 6 mit NGINX und Lets Encrypt unter CentOS 8

So installieren Sie Moodle mit Nginx und Lets Encrypt SSL unter Ubuntu 20.04

So installieren Sie Shopware mit NGINX und Lets encrypt unter Debian 9

So installieren Sie MyBB Forum mit Nginx und Lets Encrypt unter Debian 10

So installieren Sie Nginx mit Let’s Encrypt auf RHEL 8