Website-Suche

So sichern Sie Nginx mit SSL und Let’s Encrypt in FreeBSD


In diesem Leitfaden besprechen wir, wie man den Nginx-Webserver in FreeBSD mit TLS/SSL-Zertifikaten sichert, die von Let's Encrypt Certificate angeboten werden Autorität. Außerdem zeigen wir Ihnen, wie Sie die Lets’ Encrypt-Zertifikate vor dem Ablaufdatum automatisch erneuern.

TLS, ein Akronym für Transport Layer Security, ist ein Protokoll, das unter dem HTTP-Protokoll läuft und Zertifikate und Schlüssel verwendet, um die Pakete zu kapseln und Verschlüsseln Sie die Daten, die zwischen einem Server und einem Client oder in diesem Fall zwischen dem Nginx-Webserver und dem Browser des Clients ausgetauscht werden, um die Verbindung zu sichern, sodass ein Dritter, der den Datenverkehr abfangen könnte, nicht entschlüsseln kann die Übertragung.

Lesen Sie auch: Installieren Sie Let’s Encrypt für Apache unter FreeBSD

Der Prozess zum Erhalten eines kostenlosen Let's Encrypt-Zertifikats in FreeBSD kann durch die Installation des certboot-Client-Dienstprogramms, dem offiziellen verwendeten Let's Encrypt-Client, erheblich vereinfacht werden zum Generieren und Herunterladen von Zertifikaten.

Anforderungen

  1. Installieren Sie den FBEMP-Stack (Nginx, MariaDB und PHP) in FreeBSD

Schritt 1: Konfigurieren Sie Nginx TLS/SSL

1. Standardmäßig ist die TLS-Serverkonfiguration in FreeBSD nicht aktiviert, da der TLS-Server Anweisungen blockiert werden in der Standardkonfigurationsdatei von Nginx kommentiert.

Um den TLS-Server in Nginx zu aktivieren, öffnen Sie die Konfigurationsdatei nginx.conf und suchen Sie nach der Zeile, die den Anfang von definiert SSL-Server und aktualisieren Sie den gesamten Block so, dass er wie im folgenden Beispiel aussieht.

nano /usr/local/etc/nginx/nginx.conf

Auszug aus dem Nginx-HTTPS-Block:

server {
       listen 443 ssl  default_server;
       server_name  www.yourdomain.com;
	
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
	error_page   500 502 503 504  /50x.html;
        
	location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
	
	location / {
	    root   /usr/local/www/nginx;
       	    index  index.html index.htm;
	    try_files $uri $uri/ /index.php?$args;
				}

	ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_dhparam /usr/local/etc/nginx/dhparam.pem;
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 10m;
	ssl_ciphers HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	# Use gzip compression
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.0;

	# Set a variable to work around the lack of nested conditionals
	
	set $cache_uri $request_uri;
	
	location ~ /.well-known {
	allow all;
		}
    


        location ~ \.php$ {
        root	/usr/local/www/nginx;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        #fastcgi_param  SCRIPT_FILENAME /scripts$fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME $request_filename;    
		include        fastcgi_params;
        }	
    }

Der obige Block enthält zusätzlich zum SSL-Block auch einige Anweisungen zum Aktivieren der gzip-Komprimierung und FastCGI Process Manager, der zum Übergeben von PHP-Code an PHP-FPM< verwendet wird-Gateway, um dynamische Webanwendungen auszuführen.

Nachdem Sie den obigen Code zur Hauptkonfigurationsdatei von Nginx hinzugefügt haben, starten Sie den Daemon nicht neu und übernehmen Sie die Einstellungen nicht, bevor Sie ein Let’s Encrypt-Zertifikat für Ihre Domain installiert und erhalten haben.

Schritt 2: Installieren Sie den Certbot-Client in FreeBSD

2. Der Prozess der Installation des Let's Encrypt certbot-Client-Dienstprogramms in FreeBSD umfasst das Herunterladen des Quellcodes für py-certbot und dessen lokale Kompilierung durch Ausgabe die folgenden Befehle.

cd /usr/ports/security/py-certbot
make install clean

3. Das Kompilieren des Dienstprogramms py-certbot nimmt im Vergleich zur Installation eines regulären Binärpakets viel Zeit in Anspruch. Während dieser Zeit müssen eine Reihe von Abhängigkeiten heruntergeladen und lokal in FreeBSD kompiliert werden.

Außerdem wird auf Ihrem Bildschirm eine Reihe von Eingabeaufforderungen angezeigt, in denen Sie aufgefordert werden, auszuwählen, welche Pakete zur Kompilierungszeit für jede Abhängigkeit verwendet werden sollen. Wählen Sie im ersten Bildschirm die folgenden Tools aus, indem Sie die [Leertaste]-Taste drücken, um die python27-Abhängigkeit zu kompilieren, wie im folgenden Bild dargestellt.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • Fäden
  • UCS4 für Unicode-Unterstützung

4. Wählen Sie als Nächstes DOCS und THREADS für die gettext-tools-Abhängigkeit aus und klicken Sie auf OK > um fortzufahren, wie im Bild unten gezeigt.

5. Lassen Sie im nächsten Bildschirm die Option TESTS für libffi-3.2.1 deaktiviert und drücken Sie zum Verschieben OK weiter.

6. Drücken Sie als Nächstes die Leertaste, um DOCS für die py27-enum34-Abhängigkeit auszuwählen, wodurch die Dokumentation dafür installiert wird Klicken Sie auf das Tool und drücken Sie OK, um fortzufahren, wie im folgenden Screenshot dargestellt.

7. Wählen Sie abschließend die Installation von Beispielbeispielen für die py27-openssl-Abhängigkeit aus, indem Sie die [Leertaste] drücken und auf OK klicken > um den Kompilierungs- und Installationsprozess für den py-certbot-Client abzuschließen.

8. Nachdem der Kompilierungs- und Installationsprozess des Dienstprogramms py-certbot abgeschlossen ist, führen Sie den folgenden Befehl aus, um das Tool auf die neueste Version des Pakets zu aktualisieren, wie in der Abbildung dargestellt unten Screenshots.

pkg install py27-certbot

9. Um einige Probleme zu vermeiden, die beim Erhalt eines kostenlosen Let's Encrypt-Zertifikats auftreten können, ist der häufigste Fehler „pkg_resources.DistributionNotFound““ Stellen Sie sicher, dass die folgenden beiden Abhängigkeiten auch in Ihrem System vorhanden sind: py27-salt und py27-acme.

pkg install py27-salt
pkg install py27-acme

Schritt 3: Installieren Sie das Let’s Encrypt-Zertifikat für Nginx unter FreeBSD

10. Um ein eigenständiges Let's Encrypt-Zertifikat für Ihre Domain zu erhalten, führen Sie den folgenden Befehl aus und geben Sie Ihren Domainnamen und alle Subdomains an, für die Sie Zertifikate erhalten möchten, indem Sie -d angeben. Flag.

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

11. Während der Erstellung des Zertifikats werden Sie aufgefordert, Ihre E-Mail-Adresse einzugeben und den Nutzungsbedingungen von Let’s Encrypt zuzustimmen. Geben Sie a über die Tastatur ein, um zuzustimmen und fortzufahren. Außerdem werden Sie gefragt, ob Sie bereit sind, Ihre E-Mail-Adresse mit Let’s Encrypt-Partnern zu teilen.

Falls Sie Ihre E-Mail-Adresse nicht weitergeben möchten, geben Sie einfach das Wort no in die Eingabeaufforderung ein und drücken Sie die [Enter]-Taste, um fortzufahren. Nachdem die Zertifikate für Ihre Domain erfolgreich eingeholt wurden, erhalten Sie einige wichtige Hinweise, die Sie darüber informieren, wo die Zertifikate in Ihrem System gespeichert sind und wann sie ablaufen.

12. Falls Sie ein Let's Encrypt-Zertifikat mit dem „webroot“-Plugin erhalten möchten, fügen Sie das webroot-Verzeichnis des Nginx-Servers für Ihre Domain hinzu , geben Sie den folgenden Befehl mit den Flags --webroot und -w ein. Wenn Sie den Nginx-Webroot-Pfad nicht geändert haben, sollte er sich standardmäßig im Systempfad /usr/local/www/nginx/ befinden.

certbot certonly --webroot -w /usr/local/www/nginx/ -d yourdomain.com -d www.yourdomain.com

Wie bei der --strandalone-Prozedur zum Erhalten eines Zertifikats werden Sie auch bei der --webroot-Prozedur aufgefordert, eine E-Mail-Adresse für Zertifikatserneuerung und Sicherheitshinweise anzugeben, um < zu drücken Code>a, um den Allgemeinen Geschäftsbedingungen von Let's Encrypt zuzustimmen, und nein oder ja, um die E-Mail-Adresse der Let's Encrypt-Partner weiterzugeben oder nicht, wie im folgenden Beispiel dargestellt.

Beachten Sie, dass der Certbot-Client eine gefälschte E-Mail-Adresse erkennen kann und Sie nicht mit der Erstellung eines Zertifikats fortfahren lässt, bis Sie eine echte E-Mail-Adresse angeben.

Cerbot-Probe:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email   #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 

-------------------------------------------------------------------------------
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 /usr/local/www/nginx/ for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /usr/local/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 /usr/local/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

Schritt 4: Nginx TLS-Zertifikate aktualisieren

13. Der Speicherort der erhaltenen Let’s Encrypt-Zertifikate und -Schlüssel in FreeBSD ist der Systempfad /usr/local/etc/letsencrypt/live/www.yourdomain.com/. Geben Sie den Befehl ls ein, um die Komponenten Ihres Let’s Encrypt-Zertifikats anzuzeigen: die Kettendatei, die Fullchain-Datei, den privaten Schlüssel und die Zertifikatsdatei, wie im folgenden Beispiel dargestellt.

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

14. Um Let's Encrypt-Zertifikate für Ihre Domain auf dem Nginx-Webserver zu installieren, öffnen Sie die Nginx-Hauptkonfigurationsdatei oder die Konfigurationsdatei für den Nginx TLS-Server, falls es sich um eine separate Datei handelt, und ändern Sie die folgenden Zeilen um den Pfad der von let's Encrypt ausgestellten Zertifikate wie unten dargestellt widerzuspiegeln.

nano /usr/local/etc/nginx/nginx.conf

Aktualisieren Sie die folgenden Zeilen so, dass sie wie in diesem Beispiel aussehen:

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

15. Wenn außerdem die Zeile ssl_dhparam in der Nginx SSL-Konfiguration vorhanden ist, sollten Sie ein neues 2048-Bit generieren Diffie–Hellman-Taste mit dem folgenden Befehl:

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

16. Um schließlich die Nginx-TLS-Konfiguration zu aktivieren, überprüfen Sie zunächst die globale Nginx-Konfiguration auf mögliche Syntaxfehler und starten Sie dann den Nginx-Dienst neu, um die SSL-Konfiguration anzuwenden, indem Sie die folgenden Befehle ausgeben.

nginx -t
service nginx restart

17. Bestätigen Sie, ob der Nginx-Daemon an Port 443 bindet, indem Sie die folgenden Befehle ausgeben, die alle geöffneten Netzwerk-Sockets im System im Überwachungsstatus auflisten können.

netstat -an -p tcp| grep LISTEN
sockstat -4 

18. Sie können Ihre Domain-Adresse auch über das HTTPS-Protokoll aufrufen, indem Sie einen Browser öffnen und die folgende Adresse eingeben, um zu bestätigen, dass Let’s Encrypt-Zertifikate wie erwartet funktionieren. Da Sie Zertifikate verwenden, die von einer gültigen Zertifizierungsstelle generiert wurden, sollte im Browser kein Fehler angezeigt werden.

https://www.yourdomain.com

19. Das Dienstprogramm Openssl kann Ihnen auch dabei helfen, Informationen über ein von Let’s Encrypt CA erhaltenes Zertifikat zu finden, indem Sie den Befehl mit den folgenden Optionen ausführen.

openssl s_client -connect www.yourdomain.com:443

Wenn Sie Nginx zwingen möchten, alle für Ihre Domain an Port 80 empfangenen http-zu-https-Anfragen an HTTPS weiterzuleiten, öffnen Sie die Nginx-Konfigurationsdatei und suchen Sie die Serveranweisung für Port 80 und fügen Sie die folgende Zeile nach der server_name-Anweisung hinzu, wie im folgenden Beispiel dargestellt.

rewrite ^(.*) https://www.yourdomain.com$1 permanent;

20. Das Einrichten der automatischen Erneuerung für von der Let’s Encrypt-Autorität ausgestellte Zertifikate vor deren Ablauf kann durch die Planung eines Cron-Jobs zur einmal täglichen Ausführung durch den folgenden Befehl erfolgen.

crontab -e

Cron-Task zum Erneuern des Zertifikats.

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

Das ist alles! Nginx kann Ihren Besuchern jetzt sichere Webanwendungen bereitstellen, indem es die kostenlosen Let's Encrypt-Zertifikate verwendet.