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

Sichern Sie Nginx mit Lets Encrypt auf Debian 9

Let’s Encrypt ist eine kostenlose und offene Zertifizierungsstelle, die von der Internet Security Research Group (ISRG) entwickelt wurde. Von Let’s Encrypt ausgestellte Zertifikate werden heute von fast allen Browsern als vertrauenswürdig eingestuft.

In diesem Tutorial erklären wir, wie Sie das Certbot-Tool verwenden, um ein kostenloses SSL-Zertifikat für Nginx unter Debian 9 zu erhalten. Wir zeigen auch, wie Sie Nginx für die Verwendung des SSL-Zertifikats konfigurieren und HTTP/2 aktivieren.

Voraussetzungen #

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

  • Als Benutzer mit sudo-Berechtigungen angemeldet.
  • Haben Sie einen Domänennamen, der auf die IP Ihres öffentlichen Servers verweist. Wir verwenden example.com .
  • Lassen Sie Nginx installieren, indem Sie diese Anweisungen befolgen
  • Sie haben einen Serverblock für Ihre Domain. Folgen Sie dieser Anleitung, um Details zum Erstellen eines solchen zu erhalten.

Installieren Sie Certbot #

Certbot ist ein voll funktionsfähiges und benutzerfreundliches Tool, das die Aufgaben zum Erhalten und Erneuern von SSL-Zertifikaten von Let’s Encrypt und zum Konfigurieren von Webservern für die Verwendung der Zertifikate automatisieren kann. Das certbot-Paket ist in den Standard-Debian-Repositories enthalten.

Aktualisieren Sie die Paketliste und installieren Sie das certbot-Paket:

sudo apt updatesudo apt install certbot

Generiere Strong 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
Wenn Sie möchten, können Sie die Größe auf bis zu 4096 Bit ändern, aber in diesem Fall kann die Generierung je nach Systementropie mehr als 30 Minuten dauern.

Ein SSL-Zertifikat von Let’s Encrypt erhalten #

Um ein SSL-Zertifikat für unsere Domain zu erhalten, verwenden wir das Webroot-Plug-in, das funktioniert, indem es eine temporäre Datei zur Validierung 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 .

Die folgenden Befehle erstellen das Verzeichnis und machen es für den Nginx-Server beschreibbar.

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 Sie die folgenden zwei Snippets, die in alle unsere Nginx-Server-Blockdateien 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;
}

Erstellen Sie das zweite Snippet ssl.conf das 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:50m;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

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=15768000; includeSubdomains; preload";
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;
}

Aktivieren Sie den neuen Serverblock, indem Sie einen symbolischen Link zu sites-enabled erstellen Verzeichnis:

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 Certbot jetzt mit dem Webroot-Plugin ausführen und die SSL-Zertifikatsdateien abrufen, indem Sie Folgendes ausgeben:

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 2018-07-28. 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"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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 als Nächstes den Domänenserverblock wie folgt:

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
}

Mit der obigen Konfiguration erzwingen wir eine HTTPS-Umleitung von der www-Version auf die nicht-www-Version.

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

sudo systemctl reload nginx

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, der zweimal täglich ausgeführt wird und jedes Zertifikat 30 Tage vor seinem Ablauf automatisch verlängert.

Da wir nach der Erneuerung des Zertifikats das certbot-Webroot-Plug-in verwenden, müssen wir auch den nginx-Dienst neu laden. Hängen Sie --renew-hook "systemctl reload nginx" an zu /etc/cron.d/certbot Datei so, dass sie so aussieht:

sudo nano /etc/cron.d/certbot
/etc/cron.d/certbot
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-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 Nginx mit Let’s Encrypt SSL auf Debian 10/11

  5. So sichern Sie Nginx mit Let’s Encrypt unter Ubuntu 20.04

Sichern Sie Apache mit Lets Encrypt unter Debian 10

Installieren Sie Lets Encrypt und Secure Nginx mit SSL/TLS in Debian 9

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

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

So sichern Sie Nginx mit Let’s Encrypt unter CentOS 8

So sichern Sie Nginx mit Let’s Encrypt unter Ubuntu 20.04