So sichern Sie Nginx mit SSL und Let's Encrypt in FreeBSD
In dieser Anleitung besprechen wir, wie Sie den Nginx-Webserver in FreeBSD mit TLS/SSL-Zertifikaten sichern können, die von der Let's Encrypt Certificate Authority angeboten werden. Wir zeigen Ihnen auch, wie Sie die Lets' Encrypt-Zertifikate vor dem Ablaufdatum automatisch erneuern können.
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 die Daten zu verschlüsseln, die zwischen einem Server und einem Client ausgetauscht werden, oder in diesem Fall zwischen dem Nginx-Webserver und dem Browser des Clients, um die Verbindung zu sichern, so dass ein Dritter, Wer den Datenverkehr abfangen könnte, kann die Übertragung nicht entschlüsseln.
Lesen Sie auch: Installieren Sie Let's Encrypt für Apache unter FreeBSD
Der Prozess, ein kostenloses Let's Encrypt-Zertifikat in FreeBSD zu erhalten, kann durch die Installation des Client-Dienstprogramms certboot, dem offiziellen Let's Encrypt-Client, der zum Generieren und Herunterladen von Zertifikaten verwendet wird, erheblich vereinfacht werden.
Anforderungen
- Installation des FBEMP-Stacks (Nginx, MariaDB und PHP) in FreeBSD
Schritt 1: Konfigurieren von Nginx TLS/SSL
1. Standardmäßig ist die TLS/SSL-Serverkonfiguration in FreeBSD nicht aktiviert, da die Blockanweisungen für den TLS-Server in der Nginx-Standardkonfigurationsdatei kommentiert sind.
Um den TLS-Server in Nginx zu aktivieren, öffnen Sie die Konfigurationsdatei nginx.conf, suchen Sie nach der Zeile, die den Start des SSL-Servers definiert, 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 neben dem SSL-Block auch einige Anweisungen zum Aktivieren der gzip-Komprimierung und des FastCGI Process Managers, der für die Übergabe von PHP-Code an das PHP-FPM-Gateway verwendet wird, um dynamische Webanwendungen auszuführen.
Nachdem Sie den obigen Code zur Nginx-Hauptkonfigurationsdatei hinzugefügt haben, starten Sie den Daemon nicht neu und wenden Sie die Einstellungen nicht an, bevor Sie ein Let's Encrypt-Zertifikat für Ihre Domain installiert und erhalten haben.
Schritt 2: Installieren Sie den Certbot-Client unter FreeBSD
2. Die Installation des Let's Encrypt certbot Client-Dienstprogramms in FreeBSD beinhaltet das Herunterladen des Quellcodes für py-certbot und das lokale Kompilieren mit den folgenden Befehlen.
# 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 erscheint eine Reihe von Eingabeaufforderungen auf Ihrem Bildschirm, in denen Sie aufgefordert werden, auszuwählen, welche Pakete zur Kompilierzeit für jede Abhängigkeit verwendet werden sollen. Wählen Sie auf dem ersten Bildschirm die folgenden Tools aus, indem Sie die Leertaste drücken, um die python27-Abhängigkeit zu kompilieren, wie in der folgenden Abbildung 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 gettext-tools-Abhängigkeit aus und drücken Sie OK, um fortzufahren, wie in der folgenden Abbildung gezeigt.
5. Lassen Sie auf dem nächsten Bildschirm die Option TESTS für libffi-3.2.1 deaktiviert und drücken Sie OK, um fortzufahren.
6. Drücken Sie anschließend die Leertaste, um DOCS für die Abhängigkeit von py27-enum34 auszuwählen, wodurch die Dokumentation für dieses Tool installiert wird, 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, 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 Prozess des Kompilierens und Installierens 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 den folgenden Screenshots dargestellt.
# pkg install py27-certbot
9. Um einige Probleme zu vermeiden, kann es beim Abrufen eines kostenlosen Let's Encrypt-Zertifikats auftreten, wobei 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 das Flag -d implizieren.
# certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
11. Bei der Erstellung des Zertifikats werden Sie aufgefordert, Ihre E-Mail-Adresse einzugeben und den Nutzungsbedingungen von Let's Encrypt zuzustimmen. Geben Sie ein auf der Tastatur ein, um zuzustimmen und fortzufahren, und Sie werden auch 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 kein Wort in die Eingabeaufforderung ein und drücken Sie die [Enter]-Taste, um fortzufahren. Nachdem Sie die Zertifikate für Ihre Domain erfolgreich erhalten haben, 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, indem Sie das webroot-Verzeichnis des Nginx-Servers für Ihre Domain hinzufügen, 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 Abrufen eines Zertifikats werden Sie auch bei der --webroot-Prozedur aufgefordert, eine E-Mail-Adresse für die Zertifikatserneuerung und Sicherheitshinweise anzugeben, a zu drücken, um den Nutzungsbedingungen von Let's Encrypt zuzustimmen, und die E-Mail-Adresse der Let's Encrypt-Partner mit Nein oder Ja oder nicht weiterzugeben, wie im folgenden Beispiel dargestellt.
Beachten Sie, dass der certbot-Client eine gefälschte E-Mail-Adresse erkennen kann und Sie nicht mit der Generierung eines Zertifikats fortfahren lässt, bis Sie eine echte E-Mail-Adresse angegeben haben.
Cerbot-Beispiel:
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-leSchritt 4: Aktualisieren Sie Nginx TLS-Zertifikate
13. Der Speicherort der von Let's Encrypt erhaltenen 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 widerzuspiegeln, wie unten dargestellt.
# 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 die Zeile ssl_dhparam in der Nginx-SSL-Konfiguration vorhanden ist, sollten Sie mit dem folgenden Befehl einen neuen 2048-Bit-Diffie-Hellman-Schlüssel generieren:
# openssl dhparam –out /usr/local/etc/nginx/dhparam.pem 2048
16. Um 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 den Port 443 bindet, indem Sie die folgenden Befehle ausgeben, die alle geöffneten Netzwerk-Sockets im System im Überwachungszustand 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 Zertifikat zu finden, das Sie von Let's Encrypt CA erhalten haben, indem Sie den Befehl mit den folgenden Optionen ausführen.
# openssl s_client -connect www.yourdomain.com:443
Falls Sie Nginx zwingen möchten, alle für Ihre Domain auf Port 80 empfangenen HTTPS-zu-https-Anfragen an HTTPSS weiterzuleiten, öffnen Sie die Nginx-Konfigurationsdatei, suchen Sie die Serverdirektive für Port 80 und fügen Sie die folgende Zeile nach server_name Anweisung hinzu, wie im folgenden Beispiel dargestellt.
rewrite ^(.*) https://www.yourdomain.com$1 permanent;
20. Das Einrichten der automatischen Verlängerung für Zertifikate, die von der Let's Encrypt-Autorität ausgestellt wurden, bevor sie ablaufen, kann erfolgen, indem Sie einen Cron-Job so planen, dass er einmal täglich ausgeführt wird, indem Sie den folgenden Befehl ausgeben.
# crontab -e
Cron-Aufgabe zum Erneuern des Zertifikats.
0 0 * * * certbot renew >> /var/log/letsencrypt.log
Das ist alles! Nginx kann Ihren Besuchern jetzt sichere Webanwendungen mit kostenlosen Let's Encrypt-Zertifikaten bereitstellen.












