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

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

Dieses Tutorial zeigt Ihnen, wie Sie einen Nginx-Webserver auf Debian 9 mit einem TLS-Zertifikat installieren und sichern, das kostenlos von der Zertifizierungsstelle Let’s Encrypt ausgestellt wurde. Darüber hinaus werden wir die automatische Erneuerung von Lets’ Encrypt TLS-Zertifikaten mithilfe eines Cron-Jobs konfigurieren, bevor die Zertifikate ablaufen.

TLS, auch bekannt als Transport Layer Security, ist ein Netzwerkprotokoll, das SSL-Zertifikate verwendet, um den Netzwerkverkehr zu verschlüsseln, der zwischen einem Server und einem Client oder zwischen einem Webserver wie einem Nginx-Server und einem Browser fließt. Alle Daten, die zwischen diesen beiden Einheiten ausgetauscht werden, sind gesichert und die Verbindung kann nicht entschlüsselt werden, selbst wenn sie mit einer Technik wie einem Man-in-the-Middle-Angriff oder Packet Sniffing abgefangen wird. Der certbot Paketsoftware ist das offizielle Client-Dienstprogramm von Let’s Encrypt CA, das beim Generieren und Herunterladen kostenloser Let’s Encrypt-Zertifikate in Debian verwendet werden kann.

Anforderungen

  • Installieren Sie den LEMP-Stack in Debian 9.
  • Ein öffentlich registrierter Domänenname mit ordnungsgemäßen DNS-Einträgen (A-Einträge oder CNAME-Einträge für Unterdomänen).
  • Direkter Zugriff auf die Serverkonsole oder Remote-SSH-Zugriff auf den Server.
  • Ein Benutzerkonto mit Root-Rechten oder direktem Zugriff auf das Root-Konto.

Installieren Sie das Certbot-Client-Dienstprogramm

Um Let’s Encrypt cerbot zu installieren Client-Dienstprogramm in Debian 9 aus den offiziellen Debian-Repositories, öffnen Sie ein Terminal und geben Sie den folgenden Befehl mit Root-Rechten ein, wie im folgenden Screenshot dargestellt.

apt-get install certbot

Das Debian-apt Das Dienstprogramm, das die Befehlszeilenschnittstelle des Debian-Hauptpaketmanagers ist, wird Sie nach einigen vorläufigen Prüfungen fragen, ob Sie damit einverstanden sind, mit der Installation des certbot-Pakets und aller seiner erforderlichen Abhängigkeiten fortzufahren. Um die Installation der Software zu akzeptieren, antworten Sie mit Ja (y) in der Eingabeaufforderung der Serverkonsole.

Let’s Encrypt-Zertifikat abrufen

Um Let’s Encrypt-Zertifikate für eine Domain zu generieren und herunterzuladen, stellen Sie zunächst sicher, dass der Nginx-Webserver betriebsbereit ist und mindestens Port 80 aus dem Internet zugänglich ist. Um zu überprüfen, ob Nginx ausgeführt wird, führen Sie die folgenden Befehle mit Root-Rechten aus.

sudo systemctl status nginx

Wenn der Server noch nicht läuft, starten Sie den Nginx-Daemon mit dem folgenden Befehl.

sudo systemctl start nginx

Falls Sie eine gängige Firewall in Debian installiert haben, wie z. B. die UFW-Firewall, die alle eingehenden Verbindungen auf Port 80 und 443 blockiert, führen Sie die folgenden Befehle aus, um den HTTP- und den HTTPS-Port im System zu öffnen.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Um Zertifikate für Ihre Domain zu erhalten, führen Sie den cerbot aus Befehl in der Konsole mit den folgenden Parametern und Flags, wie unten erläutert. Führen Sie den Befehl mit Root-Rechten aus und geben Sie Ihren Domainnamen und alle anderen Subdomains an, für die Sie Zertifikate erhalten möchten, indem Sie –d verwenden Flagge. Geben Sie außerdem --standalone an Option, damit certbot die Nginx-Konfigurationsdateien nicht stört. Der Nginx-Server muss gestoppt werden, während Zertifikate mit dieser Option ausgestellt werden.

Die cerbot-Befehlssyntax:

sudo certbot certonly --standalone –d yourdomain.com –d www.yourdomain.com

Wenn Sie den Befehl certbot zum ersten Mal ausführen und das Zertifikat erhalten, werden Sie aufgefordert, Ihre E-Mail-Adresse hinzuzufügen und den Nutzungsbedingungen von Let’s Encrypt zuzustimmen. Schreiben Sie „a ’, um den Servicebedingungen zuzustimmen ‘nein’ Ihre E-Mail-Adresse nicht mit Let’s Encrypt-Partnern zu teilen. Lesen Sie schließlich, nachdem Sie das Zertifikat für Ihre Domain erhalten haben, die Fußnotizen, um den Systempfad des Zertifikats und das Ablaufdatum zu finden.

Alternative Möglichkeit, ein SSL-Zertifikat von Let's encrypt zu erhalten

Um ein Let’s Encrypt-Zertifikat über die „webroot "-Plugin verwenden Sie die folgende Syntax. Fügen Sie das Nginx-Webstammverzeichnis hinzu, das sich standardmäßig in /var/www/html/ befindet Systempfad, während Sie den Befehl certbot mit --webroot ausgeben und –w Flaggen. Stellen Sie außerdem sicher, dass Nginx über vollständige Schreibberechtigungen für das Web-Root-Verzeichnis verfügt, um /.well-known zu erstellen Verzeichnis.

Das --webrot option for cerbot fordert Sie außerdem auf, Ihre E-Mail-Adresse für Zertifikatserneuerungen und Sicherheitshinweise hinzuzufügen. Certbot Der Client verfügt über einen integrierten Code, der eine gefälschte E-Mail-Adresse erkennen kann. Sie müssen eine öffentlich zugängliche E-Mail-Adresse angeben, um weiterhin ein Zertifikat zu erhalten.

certbot certonly --webroot –w /var/www/html/ -d yourdomain.com –d www.yourdomain.com

 

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email protected]  #A fake email address will be detected
There seem to be problems with that address. Enter email address (used for
urgent renewal and security notices)  If you really want to skip this, you can
run the client with --register-unsafely-without-email but make sure you then
backup your account key from /etc/letsencrypt/accounts   (Enter 'c' to cancel):[email protected]
 
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a
 
-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: n
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for www.domain.com
Using the webroot path /var/www/html/  for all unmatched domains.
Waiting for verification...
Cleaning up challenges
 
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
    /etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Your
   cert will expire on 2017-12-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
Das
   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

 

Nginx für TLS (SSL) konfigurieren

Eine vollständige Standard-TLS-Konfigurationsdatei von Nginx für eine Domäne sollte wie im folgenden Dateiauszug aussehen.

/etc/nginx/sites-enabled/default-ssl Beispieldatei:

    server {
                    listen 443 ssl default_server;
                    listen [::]:443 ssl default_server;
      
                server_name  www.yourdomain.com yourdomain.com;
                #server_name _;
                               
                root /var/www/html;
                               
                access_log /var/log/nginx/access.log;
                error_log /var/log/nginx/error.log;
              
               #SSL Certificates
                ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
                ssl_certificate_key "/etc/letsencrypt/live/www. yourdomain.com/privkey.pem";
                ssl_dhparam /etc/nginx/dhparam.pem;
               
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
 
                ssl_session_cache shared:SSL:1m;
               ssl_session_timeout 10m;
                ssl_ciphers HIGH:!aNULL:!MD5;
                ssl_prefer_server_ciphers  on;
               
                add_header Strict-Transport-Security "max-age=31536000;
    #includeSubDomains" always;
 
                location / {
        index index.php index.html index.htm;
                    try_files $uri $uri/ /index.php?$args $uri/ =404;
                }
 
               
                set $cache_uri $request_uri;
               
                location ~ /.well-known {
                allow all;
                                }
              
                #
                #             # With php-fpm (or other unix sockets):
                                fastcgi_pass unix:/var/run/php/php7.0-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;
                #}
               
    }

Die Codezeilen zur Verarbeitung von PHP-Skripten über den FastCGI Process Manager finden sich ebenfalls in diesem Auszug und werden durch die folgenden Zeilen dargestellt.

location ~ \.php$ {
                                include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                }

Installieren Sie Let’s Encrypt-Zertifikate in Nginx

Zertifikate und Schlüssel von Let’s Encrypt werden in /etc/letsencrypt/live/www.yourdomain.com/ gespeichert Verzeichnis in Debian. Die ls Der Befehl gegen das obige Verzeichnis zeigt alle Zertifikatskomponenten, wie die Kettendatei, die Fullchain-Datei, den privaten Schlüssel und die Zertifikatsdatei.

ls /etc/letsencrypt/live/www.yourdomain.com/

Um das Let’s Encrypt-Zertifikat in der TLS-Konfigurationsdatei des Nginx-Webservers zu installieren, öffnen Sie Nginx default-ssl Datei und aktualisieren Sie die folgenden Zeilen, um die Dateipfade der Let’s Encrypt-Zertifikate für Ihre Domain widerzuspiegeln, wie im folgenden Auszug gezeigt.

nano /etc/nginx/sites-enabled/default-ssl

Ändern Sie die folgenden Zeilen wie folgt:

                ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem ";
                ssl_certificate_key "/etc/letsencrypt/live/www.yourdomain.com /privkey.pem";

 

Auch wenn der ssl_dhparam -Anweisung in der Nginx-SSL-Konfiguration vorhanden ist, müssen Sie einen neuen 2048-Bit-Diffie-Hellman-Schlüssel generieren, indem Sie den folgenden Befehl ausführen. Die Generierung der Diffie-Hellman-Schlüsselparameter sollte je nach Zufälligkeit oder Entropie Ihres Systems eine Weile dauern.

openssl dhparam –out /etc/nginx/dhparam.pem 2048

Bevor Sie schließlich die Nginx-TLS-Konfiguration aktivieren, indem Sie den Nginx-Daemon neu starten, um die Änderungen widerzuspiegeln, überprüfen Sie zunächst die Nginx-Konfigurationen auf mögliche Syntaxfehler. Wenn der Test der Nginx-Konfigurationsdatei erfolgreich ist, starten Sie anschließend den Nginx-Daemon neu, um die neue Konfiguration zusammen mit Let’s Encrypt-Zertifikaten zu laden, indem Sie die folgenden Befehle ausführen.

nginx -t
service nginx restart

Um zu überprüfen, ob der nginx-Dienst einen geöffneten Socket im Empfangszustand auf Port 443 besitzt, führen Sie netstat aus Befehl, wie im folgenden Auszug gezeigt.

netstat –tulpn | grep -e 443 -e LISTEN

Sie sollten auch einen Browser öffnen und über das HTTPS-Protokoll zu Ihrem Domainnamen navigieren. Wenn Let’s Encrypt-Zertifikate erfolgreich in Nginx angewendet werden, sollte der SSL-Handshake reibungslos funktionieren, ohne dass Fehler auftreten.

https://www.ihredomain.com

Zwingen Sie den Webdatenverkehr zu HTTPS

Um Ihre Domain-Besucher zu zwingen, Ihre Website nur über das HTTPS-Protokoll zu durchsuchen, öffnen Sie die für Nginx-Sites aktivierte Standardkonfigurationsdatei und fügen Sie die folgende Zeile hinzu, die erzwingt, dass alle Anfragen, die Port 80 treffen, mit einem 301-Statuscode (dauerhaft verschoben) an Port umgeleitet werden 443.

nano /etc/nginx/sites-enabled/default

Die Weiterleitungsanweisung sollte wie im folgenden Auszug dargestellt aussehen.

server_name www.yourdomain.com yourdomain.com;
return         301 https://$server_name$request_uri;

Starten Sie anschließend den Nginx-Daemon neu, um die Änderung zu übernehmen, indem Sie den folgenden Befehl ausführen.

service nginx restart

Endkontrolle

Um die von Let’s Encrypt CA generierten Zertifikate weiter zu untersuchen, können Sie einen modernen Webbrowser wie Chrome verwenden. Besuchen Sie Ihre Domain im Chrome-Browser und drücken Sie die Funktionstaste F12, um die Entwicklertools zu öffnen. Navigieren Sie zur Registerkarte Sicherheit und klicken Sie auf Zertifikat anzeigen Schaltfläche, um das Zertifikat zu öffnen, wie in den folgenden Screenshots gezeigt.

Ein weiteres nützliches Dienstprogramm zur Untersuchung von SSL-Zertifikaten erweist sich als openssl Befehlszeilenprogramm. Um zusätzliche Informationen für ein Let’s Encrypt CA-Zertifikat anzuzeigen, führen Sie den folgenden Befehl in einer Linux-Konsole aus.

openssl s_client –connect www.yourdomain.com:443

Let’s Encrypt-Zertifikat automatisch erneuern

Um ein von Let’s Encrypt CA ausgestelltes Zertifikat vor dem Ablaufdatum automatisch zu erneuern, planen Sie einen crontab-Job, der einmal täglich um 2:00 Uhr ausgeführt wird, indem Sie den folgenden Befehl ausgeben. Die Ausgabe des ausgeführten Cron-Jobs wird in eine Protokolldatei geleitet, die in /var/log/letsencrypt.log

gespeichert ist
crontab –e

Cron-Job zum Erneuern des Zertifikats.

0 2 * * * certbot renew >> /var/log/letsencrypt.log

Das ist alles! Weitere erweiterte Konfigurationen in Bezug auf Let’s Encrypt-Zertifikate und -Dienstprogramme finden Sie in der offiziellen Dokumentation unter der folgenden Internetadresse https://certbot.eff.org/docs/.


Debian
  1. Sichern Sie Nginx mit Lets Encrypt auf Debian 9

  2. Sichern Sie Nginx mit Lets Encrypt unter Debian 10 Linux

  3. Sichern Sie Apache mit Lets Encrypt unter Debian 10

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

  5. So installieren Sie OpenCart mit Nginx und Lets Encrypt unter Debian 10

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

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

So installieren Sie Drupal mit Nginx und Let’s Encrypt SSL unter Debian 11

So installieren Sie Joomla mit Nginx und Let’s Encrypt SSL unter Debian 11

So installieren Sie WordPress mit Nginx und Let’s Encrypt SSL unter Debian 11

So installieren Sie Nginx mit Let’s Encrypt TLS/SSL unter Debian 11 Bullseye