Android

Sichern Sie Nginx mit let's encrypt on centos 7

What the heck is the event loop anyway? | Philip Roberts | JSConf EU

What the heck is the event loop anyway? | Philip Roberts | JSConf EU

Inhaltsverzeichnis:

Anonim

Let's Encrypt ist eine kostenlose und offene Zertifizierungsstelle, die von der Internet Security Research Group (ISRG) entwickelt wurde. Von Let's Encrypt ausgestellte Zertifikate werden heute von fast allen Browsern als vertrauenswürdig eingestuft.

In diesem Lernprogramm erhalten Sie schrittweise Anweisungen zum Sichern von Nginx mit Let's Encrypt mithilfe des Certbot-Tools unter CentOS 7.

Voraussetzungen

Stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllt haben, bevor Sie mit diesem Lernprogramm fortfahren:

  • Sie haben einen Domainnamen, der auf Ihre öffentliche Server-IP verweist. In diesem Tutorial werden wir example.com Sie haben das EPEL-Repository aktiviert und Nginx installiert, indem Sie wie folgt vorgehen, um Nginx unter CentOS 7 zu installieren.

Installieren Sie Certbot

Certbot ist ein benutzerfreundliches Tool, mit dem Sie die Aufgaben zum Abrufen und Erneuern von Let's Encrypt SSL-Zertifikaten und zum Konfigurieren von Webservern automatisieren können.

So installieren Sie das certbot-Paket aus dem EPEL-Repository:

sudo yum install certbot

Generiere eine starke Dh (Diffie-Hellman) Gruppe

Diffie-Hellman-Schlüsselaustausch (DH) ist eine Methode zum sicheren Austauschen von kryptografischen Schlüsseln über einen ungesicherten Kommunikationskanal.

Generieren Sie einen neuen Satz von 2048-Bit-DH-Parametern, indem Sie den folgenden Befehl eingeben:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 Wenn Sie möchten, können Sie die Größe auf bis zu 4096 Bit ändern. In diesem Fall kann die Generierung je nach Systementropie jedoch länger als 30 Minuten dauern.

Erhalten eines SSL-Zertifikats von Let's Encrypt

Um ein SSL-Zertifikat für unsere Domain zu erhalten, verwenden wir das Webroot-Plugin, mit dem eine temporäre Datei zur Validierung der angeforderten Domain im ${webroot-path}/.well-known/acme-challenge . Der Let's Encrypt-Server sendet HTTP-Anforderungen an die temporäre Datei, um zu überprüfen, ob die angeforderte Domäne auf den Server aufgelöst wurde, auf dem Certbot ausgeführt wird.

Zur Vereinfachung .well-known/acme-challenge wir alle HTTP-Anforderungen für .well-known/acme-challenge einem einzelnen Verzeichnis zu, /var/lib/letsencrypt .

Mit den folgenden Befehlen wird das Verzeichnis erstellt und für den Nginx-Server schreibbar gemacht.

sudo mkdir -p /var/lib/letsencrypt/.well-known sudo chgrp nginx /var/lib/letsencrypt sudo chmod g+s /var/lib/letsencrypt

Um das Duplizieren von Code zu vermeiden, erstellen Sie die folgenden zwei Snippets, die wir in alle unsere Nginx-Serverblockdateien aufnehmen werden:

sudo mkdir /etc/nginx/snippets /etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; } /etc/nginx/snippets/ssl.conf

ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 30s; add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload"; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;

Das obige Snippet enthält die von Mozilla empfohlenen Chipper, aktiviert OCSP-Heftung, HTTP Strict Transport Security (HSTS) und erzwingt einige sicherheitsgerichtete

Öffnen Sie nach dem letsencrypt.conf Snippets den Domain-Server-Block und letsencrypt.conf Snippet letsencrypt.conf wie folgt hinzu:

/etc/nginx/conf.d/example.com.conf

server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }

Laden Sie die Nginx-Konfiguration neu, damit die Änderungen wirksam werden:

sudo systemctl reload nginx

Sie können Certbot jetzt mit dem Webroot-Plugin ausführen und die SSL-Zertifikatdateien für Ihre Domain erhalten, indem Sie Folgendes eingeben:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Wenn das SSL-Zertifikat erfolgreich abgerufen wurde, gibt certbot die folgende Meldung aus:

IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2018-06-11. 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" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:

Nachdem Sie die Zertifikatsdateien haben, können Sie Ihren Domain-Server-Block wie folgt bearbeiten:

/etc/nginx/conf.d/example.com.conf

server { listen 80; server_name www.example.com example.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; return 301 https://example.com$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; #… other code }

Mit der obigen Konfiguration erzwingen wir HTTPS und leiten das WWW auf eine Nicht-WWW-Version um.

Laden Sie abschließend den Nginx-Dienst neu, damit die Änderungen wirksam werden:

sudo systemctl reload nginx

Automatische Erneuerung Lassen Sie uns das SSL-Zertifikat verschlüsseln

Die Zertifikate von Let's Encrypt sind 90 Tage gültig. Um die Zertifikate vor Ablauf automatisch zu erneuern, erstellen wir einen Cronjob, der zweimal täglich ausgeführt wird und alle Zertifikate 30 Tage vor Ablauf automatisch erneuert.

Führen Sie den Befehl crontab , um einen neuen Cronjob zu erstellen:

sudo crontab -e

Fügen Sie die folgenden Zeilen ein:

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

Speichern und schließen Sie die Datei.

Um den Erneuerungsprozess zu testen, können Sie den Befehl certbot gefolgt von der --dry-run :

sudo certbot renew --dry-run

Wenn keine Fehler vorliegen, war der Testerneuerungsprozess erfolgreich.

Fazit

In diesem Lernprogramm haben Sie den Let's Encrypt-Client, certbot, verwendet, um SSL-Zertifikate für Ihre Domain herunterzuladen. Sie haben auch Nginx-Snippets erstellt, um das Duplizieren von Code zu vermeiden, und Nginx für die Verwendung der Zertifikate konfiguriert. Am Ende des Tutorials haben Sie einen Cronjob für die automatische Zertifikatserneuerung eingerichtet.

nginx centos verschlüsseln wir certbot ssl

Dieser Beitrag ist Teil der Install LEMP Stack on CentOS 7-Reihe.

Andere Beiträge in dieser Reihe:

• So installieren Sie Nginx unter CentOS 7 • Sichern Sie Nginx mit Let's Encrypt unter CentOS 7 • Installieren Sie MariaDB unter CentOS 7 • Installieren Sie PHP 7 unter CentOS 7 • So richten Sie Nginx-Serverblöcke unter CentOS 7 ein