In diesem Leitfaden besprechen wir, wie Sie Nginx sichern können Webserver in FreeBSD mit TLS/SSL Zertifikate, die von 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 HTTP läuft Protokoll und verwendet Zertifikate und Schlüssel, um die Pakete zu kapseln und die zwischen einem Server und einem Client oder in diesem Fall zwischen Nginx ausgetauschten Daten zu verschlüsseln Webserver und Browser des Clients, um die Verbindung zu sichern, damit Dritte, die den Datenverkehr abfangen könnten, die Übertragung nicht entschlüsseln können.
Lesen Sie auch :Installieren Sie Let’s Encrypt für Apache unter FreeBSD
Der Vorgang zum Erhalt eines kostenlosen Let’s Encrypt Zertifikat in FreeBSD kann durch die Installation von certboot erheblich vereinfacht werden Client-Dienstprogramm, das der offizielle Client von Let’s Encrypt ist, der zum Generieren und Herunterladen von Zertifikaten verwendet wird.
Anforderungen
- Installieren Sie den FBEMP-Stack (Nginx, MariaDB und PHP) in FreeBSD
Schritt 1:Konfigurieren Sie Nginx TLS/SSL
1. Standardmäßig ist das TLS/SSL Die Serverkonfiguration ist in FreeBSD nicht aktiviert weil das TLS Server-Block-Anweisungen werden in Nginx kommentiert Standardkonfigurationsdatei.
Um das TLS zu aktivieren Server in Nginx , öffnen Sie nginx.conf Konfigurationsdatei, suchen Sie nach der Zeile, die den Beginn von SSL definiert server und aktualisieren Sie den gesamten Block so, dass er wie im Beispiel unten aussieht.
# nano /usr/local/etc/nginx/nginx.conf
Nginx-HTTPS-Blockauszug:
Nginx HTTPS Configurationserver { 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 zusätzlich zu SSL Block, enthält auch einige Anweisungen zum Aktivieren der gzip-Komprimierung und des FastCGI Process Manager , wird zum Übergeben von PHP-Code an PHP-FPM verwendet Gateway, um dynamische Webanwendungen auszuführen.
Nachdem Sie den obigen Code zu Nginx hinzugefügt haben Hauptkonfigurationsdatei, starten Sie den Daemon nicht neu und wenden Sie die Einstellungen nicht an, bevor Sie Let’s Encrypt installieren und erhalten Zertifikat für Ihre Domain.
Schritt 2:Installieren Sie den Certbot-Client in FreeBSD
2. Der Installationsprozess von Let’s Encrypt certbot Client-Dienstprogramm in FreeBSD beinhaltet das Herunterladen des Quellcodes für py-certbot und kompilieren Sie es lokal, indem Sie die folgenden Befehle ausführen.
# cd /usr/ports/security/py-certbot # make install clean
3. py-certbot kompilieren Das Dienstprogramm benötigt viel Zeit im Vergleich zur Installation eines regulären Binärpakets. 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. Wählen Sie auf dem ersten Bildschirm die folgenden Werkzeuge aus, indem Sie [Leertaste] drücken Schlüssel zum Kompilieren von python27 Abhängigkeit, wie im Bild unten dargestellt.
- IPV6
- LIBFFI
- NLS
- PYMALLOC
- THREADS
- UCS4 für Unicode-Unterstützung
4. Wählen Sie als Nächstes DOCS aus und THREADS für gettext-tools Abhängigkeit und drücken Sie OK um fortzufahren, wie im Bild unten gezeigt.
5. Verlassen Sie auf dem nächsten Bildschirm die TESTS Option für libffi-3.2.1 deaktiviert und drücken Sie OK weiter zu bewegen.
6. Drücken Sie als Nächstes die Leertaste , um DOCS auszuwählen für py27-enum34 Abhängigkeit, 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 schließlich die Installation von Beispielbeispielen für py27-openssl Abhängigkeit durch Drücken von [Leertaste] -Taste und drücken Sie OK um den Kompilierungs- und Installationsprozess für py-certbot abzuschließen Kunde.
8. Nach dem Kompilieren und Installieren von py-certbot Dienstprogramm beendet 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 dies beim Erwerb eines kostenlosen Let’s Encrypt auftreten Zertifikat, wobei der häufigste Fehler „pkg_resources.DistributionNotFound ist “, stellen Sie sicher, dass die folgenden zwei 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
implizieren Flagge.
# certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
11. Beim Generieren des Zertifikats werden Sie aufgefordert, Ihre E-Mail-Adresse einzugeben und den Nutzungsbedingungen von Let’s Encrypt zuzustimmen. Geben Sie a
ein von der Tastatur, 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 teilen möchten, geben Sie einfach no
ein Wort in die Eingabeaufforderung ein und drücken Sie [enter] Schlüssel zum Fortfahren. Nachdem die Zertifikate für Ihre Domain erfolgreich bezogen 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 über die „webroot ”-Plug-in durch Hinzufügen der Webroot Verzeichnis des Nginx-Servers für Ihre Domäne geben Sie den folgenden Befehl mit --webroot
aus und -w
Flaggen. Wenn Sie den Nginx-Webroot-Pfad nicht geändert haben, sollte er sich standardmäßig unter /usr/local/www/nginx/ befinden Systempfad.
# certbot certonly --webroot -w /usr/local/www/nginx/ -d yourdomain.com -d www.yourdomain.com
Wie in --strandalone
Verfahren zum Erhalt eines Zertifikats, der --webroot
Das Verfahren fordert Sie auch auf, eine E-Mail-Adresse für die Zertifikatserneuerung und Sicherheitshinweise anzugeben, um a
zu drücken um den Geschäftsbedingungen von Let’s Encrypt zuzustimmen und no
oder yes
die E-Mail-Adresse an Let’s Encrypt-Partner weitergeben oder nicht weitergeben, 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 angeben.
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 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 /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 /usr/local/etc/letsencrypt/live/www.yourdomain.com/ Systempfad. Geben Sie den Befehl ls aus, um die Komponenten Ihres Let’s Encrypt-Zertifikats anzuzeigen:die Chain-Datei, 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 Hauptkonfigurationsdatei von Nginx 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 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. Auch wenn die Zeile ssl_dhparam ist in Nginx SSL vorhanden Konfiguration, sollten Sie ein neues 2048 generieren etwas Diffie–Hellman Schlüssel mit dem folgenden Befehl:
# openssl dhparam –out /usr/local/etc/nginx/dhparam.pem 2048
16. Um schließlich die TLS-Konfiguration von Nginx zu aktivieren, überprüfen Sie zunächst die globale Konfiguration von Nginx auf mögliche Syntaxfehler und starten Sie dann den Nginx-Dienst neu, um die SSL-Konfiguration anzuwenden, indem Sie die folgenden Befehle ausführen.
# nginx -t # service nginx restart
17. Bestätigen Sie, ob der Nginx-Daemon an 443 gebunden ist Port, indem Sie die folgenden Befehle ausgeben, die alle geöffneten Netzwerk-Sockets im System im Listening-Zustand auflisten können.
# netstat -an -p tcp| grep LISTEN # sockstat -4
18. Sie können Ihre Domain-Adresse auch über HTTPS aufrufen Protokoll, 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 Openssl-Dienstprogramm kann Ihnen auch dabei helfen, Informationen zu einem 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 HTTP-zu-https-Anforderungen weiterzuleiten, die für Ihre Domain auf Port 80 empfangen werden zu HTTPS , öffnen Sie die Nginx-Konfigurationsdatei, suchen Sie die Serverdirektive für Port 80 und fügen Sie die folgende Zeile nach der server_name-Anweisung hinzu, wie im folgenden Beispiel gezeigt.
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 durch Planen eines Cron-Jobs erfolgen, der einmal täglich ausgeführt wird, indem Sie den folgenden Befehl ausführen.
# crontab -e
Crontask zum Erneuern des Zertifikats.
0 0 * * * certbot renew >> /var/log/letsencrypt.log
Das ist alles! Nginx kann Ihren Besuchern jetzt sichere Webanwendungen mit kostenlosen Zertifikaten von Let’s Encrypt bereitstellen.