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

Sichern Sie Nginx mit Lets Encrypt unter Debian 10 Linux

Let’s Encrypt ist eine kostenlose, automatisierte und offene Zertifizierungsstelle, die von der Internet Security Research Group (ISRG) entwickelt wurde und kostenlose SSL-Zertifikate bereitstellt.

Von Let’s Encrypt ausgestellte Zertifikate werden von allen gängigen Browsern als vertrauenswürdig eingestuft und sind 90 Tage ab Ausstellungsdatum gültig.

Dieses Tutorial zeigt, wie man ein kostenloses SSL-Zertifikat von Let’s Encrypt auf Debian 10, Buster, auf dem Nginx als Webserver läuft, installiert. Wir zeigen auch, wie Nginx für die Verwendung des SSL-Zertifikats konfiguriert und HTTP/2 aktiviert wird.

Voraussetzungen #

Stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind, bevor Sie mit der Anleitung fortfahren:

  • Angemeldet als root oder Benutzer mit sudo-Berechtigungen.
  • Die Domain, für die Sie das SSL-Zertifikat erhalten möchten, muss auf Ihre öffentliche Server-IP verweisen. Wir verwenden example.com .
  • Nginx installiert.

Installieren von Certbot #

Wir verwenden das certbot-Tool, um die Zertifikate zu erhalten und zu erneuern.

Certbot ist ein voll ausgestattetes und benutzerfreundliches Tool, das die Aufgaben zum Abrufen und Erneuern von SSL-Zertifikaten von Let’s Encrypt und zum Konfigurieren von Webservern für die Verwendung der Zertifikate automatisiert.

Das certbot-Paket ist in den Standard-Debian-Repositories enthalten. Führen Sie die folgenden Befehle aus, um certbot zu installieren:

sudo apt updatesudo apt install certbot

Generiere Dh (Diffie-Hellman) Gruppe #

Der Diffie-Hellman-Schlüsselaustausch (DH) ist eine Methode zum sicheren Austausch kryptografischer Schlüssel über einen ungesicherten Kommunikationskanal.

Wir werden einen neuen Satz von 2048-Bit-DH-Parametern generieren, um die Sicherheit zu erhöhen:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Sie können die Größe auch auf 4096 Bit ändern, aber die Generierung kann je nach Systementropie mehr als 30 Minuten dauern.

Ein SSL-Zertifikat von Let’s Encrypt erhalten #

Um ein SSL-Zertifikat für die Domain zu erhalten, verwenden wir das Webroot-Plugin. Es funktioniert durch Erstellen einer temporären Datei zum Validieren der angeforderten Domain im ${webroot-path}/.well-known/acme-challenge Verzeichnis. Der Let’s Encrypt-Server sendet HTTP-Anforderungen an die temporäre Datei, um zu überprüfen, ob die angeforderte Domäne zu dem Server aufgelöst wird, auf dem certbot ausgeführt wird.

Wir werden alle HTTP-Anforderungen für .well-known/acme-challenge abbilden in ein einziges Verzeichnis, /var/lib/letsencrypt .

Führen Sie die folgenden Befehle aus, um das Verzeichnis zu erstellen und es für den Nginx-Server beschreibbar zu machen:

sudo mkdir -p /var/lib/letsencrypt/.well-knownsudo chgrp www-data /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt

Um doppelten Code zu vermeiden, erstellen wir zwei Snippets, die in alle Blockdateien des Nginx-Servers aufgenommen werden.

Öffnen Sie Ihren Texteditor und erstellen Sie das erste Snippet, letsencrypt.conf :

sudo nano /etc/nginx/snippets/letsencrypt.conf
/etc/nginx/snippets/letsencrypt.conf
location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}

Der zweite Ausschnitt ssl.conf enthält die von Mozilla empfohlenen Chipper, aktiviert OCSP Stapling, HTTP Strict Transport Security (HSTS) und erzwingt wenige sicherheitsorientierte HTTP-Header.

sudo nano /etc/nginx/snippets/ssl.conf
/etc/nginx/snippets/ssl.conf
ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;

add_header Strict-Transport-Security "max-age=63072000" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;

Öffnen Sie anschließend die Blockdatei des Domänenservers und fügen Sie die letsencrypt.conf hinzu Snippet wie unten gezeigt:

sudo nano /etc/nginx/sites-available/example.com.conf
/etc/nginx/sites-available/example.com.conf
server {
  listen 80;
  server_name example.com www.example.com;

  include snippets/letsencrypt.conf;
}

Erstellen Sie einen symbolischen Link zu sites-enabled Verzeichnis, um den Domänenserverblock zu aktivieren:

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

Starten Sie den Nginx-Dienst neu, damit die Änderungen wirksam werden:

sudo systemctl restart nginx

Sie können jetzt die SSL-Zertifikatsdateien abrufen, indem Sie den folgenden Befehl ausführen:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Wenn das SSL-Zertifikat erfolgreich bezogen wurde, wird die folgende Meldung auf Ihrem Terminal gedruckt:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2020-02-22. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Bearbeiten Sie den Domänenserverblock und fügen Sie die SSL-Zertifikatsdateien wie folgt ein:

sudo nano /etc/nginx/sites-available/example.com.conf
/etc/nginx/sites-available/example.com.conf
server {
    listen 80;
    server_name www.example.com example.com;

    include snippets/letsencrypt.conf;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # . . . other code
}

Die obige Konfiguration weist Nginx an, von HTTP auf HTTPS und von der www-Version auf die nicht-www-Version umzuleiten.

Starten Sie den Nginx-Dienst neu oder laden Sie ihn neu, damit die Änderungen wirksam werden:

sudo systemctl restart nginx

Öffnen Sie Ihre Website mit https:// , und Sie werden ein grünes Schlosssymbol bemerken.

Wenn Sie Ihre Domain mit dem SSL Labs Server Test testen, erhalten Sie ein A+ Klasse, wie im Bild unten gezeigt:

SSL-Zertifikat von Let’s Encrypt automatisch verlängern #

Die Zertifikate von Let’s Encrypt sind 90 Tage gültig. Um die Zertifikate automatisch zu erneuern, bevor sie ablaufen, erstellt das certbot-Paket einen Cronjob und einen systemd-Timer. Der Timer erneuert die Zertifikate automatisch 30 Tage vor Ablauf.

Wenn das Zertifikat erneuert wird, müssen wir auch den nginx-Dienst neu laden. Öffnen Sie die /etc/letsencrypt/cli.ini und fügen Sie die folgende Zeile hinzu:

sudo nano /etc/letsencrypt/cli.ini
/etc/cron.d/certbot
deploy-hook = systemctl reload nginx

Testen Sie den automatischen Erneuerungsprozess, indem Sie diesen Befehl ausführen:

sudo certbot renew --dry-run

Wenn keine Fehler vorliegen, bedeutet dies, dass der Erneuerungsprozess erfolgreich war.


Debian
  1. So sichern Sie Nginx mit Lets Encrypt auf Ubuntu 20.04 / 18.04

  2. Sichern Sie Nginx mit Lets Encrypt auf Ubuntu 18.04

  3. Sichern Sie Nginx mit Lets Encrypt auf Ubuntu 16.04

  4. Sichern Sie Apache2 mit Let’s Encrypt SSL auf Debian 10/11

  5. Sichern Sie Nginx mit Let’s Encrypt SSL auf Debian 10/11

Installieren Sie Automad CMS mit Nginx und Lets Encrypt SSL auf Debian 10

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

So installieren Sie DokuWiki mit Lets Encrypt SSL unter Debian 11

So installieren Sie AbanteCart mit Nginx und SSL unter Debian 11

So installieren Sie Discourse Forum mit Nginx und Free Lets Encrypt SSL unter Debian 11

So installieren Sie Wekan Kanban mit Nginx und Lets Encrypt SSL unter Debian 10