Installieren Sie Let’s Encrypt und sichern Sie Nginx mit SSL/TLS unter Debian 9

Dieses Tutorial zeigt Ihnen, wie Sie einen Nginx-Webserver unter Debian 9 mit einem TLS-Zertifikat installieren und sichern, das von der Let’s Encrypt Certificate Authority kostenlos ausgestellt wurde. Darüber hinaus werden wir die automatische Verlängerung von Lets‘ Encrypt TLS-Zertifikaten mit einem Cron-Job konfigurieren.

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 beispielsweise dem Nginx-Server, und einem Browser abläuft. Alle zwischen diesen beiden Einheiten ausgetauschten Daten sind gesichert und die Verbindung kann nicht entschlüsselt werden, auch wenn sie mit einer Technik abgefangen wird, wie z.B. durch einen mittleren Angriff oder Paketschnüffeln. Die certbot Software ist das offizielle Client-Dienstprogramm der Let’s Encrypt CA, das bei der Generierung und dem Herunterladen von kostenlosen Let’s Encrypt-Zertifikaten in Debian verwendet werden kann.

Anforderungen

  • Installieren Sie LEMP Stack in Debian 9.
  • Ein öffentlich registrierter Domainname mit korrekten DNS-Einträgen ( A-Einträge oder CNAME-Einträge für Subdomains).
  • Direkter Zugriff auf die Konsole des Servers oder Remote-SSH-Zugriff auf den Server.
  • Ein Benutzerkonto mit Root-Rechten oder direktem Zugriff auf das Root-Konto.

Certbot Client Utility installieren

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

apt-get install certbot

Certbot unter Debian 9 installieren

Das Debian apt-Dienstprogramm, das die Befehlszeilenschnittstelle des Debian-Hauptpaketmanagers ist, wird Sie nach einigen vorläufigen Prüfungen fragen, ob Sie damit einverstanden sind, das certbot-Paket und alle erforderlichen Abhängigkeiten weiter zu installieren, um den Prozess der Installation der Software zu akzeptieren, antworten Sie mit ja (y) in der Konsolenaufforderung des Servers.

Holen Sie sich Let’s Encrypt Zertifikat

Um Let’s Encrypt-Zertifikate für eine Domain zu generieren und herunterzuladen, stellen Sie zunächst sicher, dass der Nginx-Webserver hochgefahren ist und mindestens Port 80 über das Internet zugänglich ist. Um zu überprüfen, ob Nginx läuft, 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 gemeinsame Firewall in Debian installiert haben, wie z.B. die UFW-Firewall, die alle eingehenden Verbindungen auf den Ports 80 und 443 blockiert, geben Sie die folgenden Befehle ein, um den HTTP- und HTTPS-Port im System zu öffnen.

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

Um Zertifikate für Ihre Domäne zu erhalten, führen Sie den Befehl cerbot in der Konsole mit den folgenden Parametern und Flags aus, wie unten beschrieben. 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 das Flag -d verwenden. Stellen Sie auch die Option –standalone zur Verfügung, damit certbot die Nginx-Konfigurationsdateien nicht stört. Der Nginx-Server muss bei der Ausgabe von Zertifikaten mit dieser Option gestoppt werden.

Die cerbot Befehlssyntax:

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

Wenn Sie den certbot-Befehl 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 Nutzungsbedingungen zuzustimmen ‚ no‘, um Ihre E-Mail-Adresse nicht an Let’s Encrypt-Partner weiterzugeben. Nachdem Sie das Zertifikat für Ihre Domain erhalten haben, lesen Sie schließlich die Fußnoten, um den Systempfad der Zertifikate und das Ablaufdatum zu ermitteln.

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

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

Die–webrotOption für cerbot wird Sie auch bitten, Ihre E-Mail-Adresse für die Zertifikatsverlängerung und Sicherheitshinweise anzugeben.CertbotClient hat einen eingebauten 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):contact@yourdomain.com  #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):youremail@domain.com
 
-------------------------------------------------------------------------------
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
   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

 

Holen Sie sich ein SSL-Zertifikat mit Certbot

 

Nginx für TLS (SSL) konfigurieren

Eine Nginx Full Default TLS-Konfigurationsdatei für eine Domain sollte wie im folgenden Dateiauszug aussehen.

/etc/nginx/sites-enabled/default-ssl file sample:

    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 Codezeile für die Verarbeitung von PHP-Skripten über den FastCGI Process Manager finden Sie ebenfalls in diesem Auszug und wird 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 Certificates in Nginx.

Let’s Encrypt Zertifikate und Schlüssel werden im Verzeichnis /etc/letsencrypt/live/www.yourdomain.com/ in Debian gespeichert. Der Befehl ls 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 die Nginx default-ssl-Datei und aktualisieren Sie die folgenden Zeilen, um die Pfade der Zertifikatsdatei für Ihre Domain wiederzugeben, wie im folgenden Auszug gezeigt.

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

Ändern Sie die folgenden Zeilen wie unten beschrieben:

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

Festlegen Lässt die Verschlüsselung von Zertifikatspfaden zu

Wenn die Anweisung ssl_dhparam in der Nginx SSL-Konfiguration vorhanden ist, müssen Sie außerdem einen neuen 2048-Bit-Diffie-Hellman-Schlüssel erzeugen, indem Sie den folgenden Befehl ausführen. Die Generierung der Diffie-Hellman-Schlüsselparameter sollte eine Weile dauern, abhängig von der Zufälligkeit oder Entropie Ihres Systems.

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 Änderungen zu berücksichtigen, ü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 neben Let’s Encrypt-Zertifikaten zu laden, indem Sie die folgenden Befehle ausführen.

nginx -t
service nginx restart

Nginx neu starten

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

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 Fehler zu verursachen.

https://www.yourdomain.com

Erzwingen von Web-Traffic auf HTTPS

Um Ihre Domänenbesucher zu zwingen, Ihre Website nur über das HTTPS-Protokoll zu durchsuchen, öffnen Sie die von Nginx-Sites aktivierte Standardkonfigurationsdatei und fügen Sie die folgende Zeile hinzu, die alle Anfragen, die Port 80 betreffen, mit einem 301-Statuscode (permanent verschoben) auf Port 443 umleitet.

nano /etc/nginx/sites-enabled/default

Die Redirect-Anweisung sollte so aussehen, wie sie im folgenden Auszug dargestellt wird.

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

HTTPS erzwingen

Starten Sie anschließend den Nginx-Daemon neu, um die Änderung anzuwenden, 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 Developer Tools zu öffnen. Navigieren Sie zur Registerkarte Sicherheit und klicken Sie auf die Schaltfläche Zertifikat anzeigen, um das Zertifikat zu öffnen, wie in den folgenden Screenshots gezeigt.

SSL-Zertifikat überprüfen

SSL-Zertifikatsdetails werden im Chrome-Browser angezeigt.

Ein weiteres nützliches Dienstprogramm bei der Untersuchung von SSL-Zertifikaten erweist sich als das Befehlszeilendienstprogramm openssl. 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

Automatische Verlängerung Let’s Encrypt Zertifikat

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

crontab –e

Cron-Job zur Verlängerung des Zertifikats.

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

Das ist alles! Für weitere fortgeschrittene Konfigurationen in Bezug auf Let’s Encrypt Zertifikate und Utility besuchen Sie die offizielle Dokumentation unter der folgenden Internetadresse https://certbot.eff.org/docs/.

Das könnte dich auch interessieren …