GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

Sichern Sie Apache mit Lets Encrypt unter CentOS 8

Let’s Encrypt ist eine kostenlose, automatisierte und offene Zertifizierungsstelle, die von der Internet Security Research Group (ISRG) entwickelt wurde und kostenlose SSL-Zertifikate bereitstellt.

Von Let’s Encrypt ausgestellte Zertifikate werden von allen gängigen Browsern als vertrauenswürdig eingestuft und sind 90 Tage ab Ausstellungsdatum gültig.

Dieses Tutorial erklärt, wie man ein kostenloses SSL-Zertifikat von Let’s Encrypt auf CentOS 8 installiert, auf dem Apache als Webserver läuft. Wir verwenden das certbot-Tool, um die Zertifikate zu erhalten und zu erneuern.

Voraussetzungen #

Stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind, bevor Sie fortfahren:

  • Haben Sie einen Domänennamen, der auf die IP Ihres öffentlichen Servers verweist. Wir verwenden example.com .
  • Apache ist installiert und wird auf Ihrem Server mit einem für Ihre Domain konfigurierten virtuellen Host ausgeführt.
  • Die Ports 80 und 443 sind in Ihrer Firewall geöffnet.

Installieren Sie die folgenden Pakete, die für einen SSL-verschlüsselten Webserver erforderlich sind:

sudo dnf install mod_ssl openssl

Wenn das mod_ssl-Paket installiert ist, sollte es einen selbstsignierten Schlüssel und Zertifikatsdateien für den lokalen Host erstellen. Wenn die Dateien nicht automatisch erstellt werden, können Sie sie mit openssl erstellen Befehl:

sudo openssl req -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes \  -out /etc/pki/tls/certs/localhost.crt \  -keyout /etc/pki/tls/private/localhost.key

Installieren Sie Certbot #

Certbot ist ein kostenloses Befehlszeilentool, das den Prozess zum Abrufen und Erneuern von Let’s Encrypt SSL-Zertifikaten von und zum automatischen Aktivieren von HTTPS auf Ihrem Server vereinfacht.

Das certbot-Paket ist nicht in den standardmäßigen CentOS 8-Repositories enthalten, kann aber von der Website des Anbieters heruntergeladen werden.

Führen Sie das folgende wget aus Befehl als root- oder sudo-Benutzer, um das certbot-Skript in /usr/local/bin herunterzuladen Verzeichnis:

sudo wget -P /usr/local/bin https://dl.eff.org/certbot-auto

Sobald der Download abgeschlossen ist, machen Sie die Datei ausführbar:

sudo chmod +x /usr/local/bin/certbot-auto

Generiere Strong Dh (Diffie-Hellman) Gruppe #

Der Diffie-Hellman-Schlüsselaustausch (DH) ist eine Methode zum sicheren Austausch kryptografischer Schlüssel über einen ungesicherten Kommunikationskanal. Generieren Sie einen neuen Satz von 2048-Bit-DH-Parametern, um die Sicherheit zu erhöhen:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Sie können die Größe auf bis zu 4096 Bit ändern, aber die Generierung kann je nach Systementropie mehr als 30 Minuten dauern.

Ein SSL-Zertifikat von Let’s Encrypt erhalten #

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

Um die Einrichtung einfacher zu machen, werden wir alle HTTP-Anforderungen für .well-known/acme-challenge abbilden in ein einziges Verzeichnis, /var/lib/letsencrypt .

Führen Sie die folgenden Befehle aus, um das Verzeichnis zu erstellen und es für den Apache-Server beschreibbar zu machen.

sudo mkdir -p /var/lib/letsencrypt/.well-knownsudo chgrp apache /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt

Um doppelten Code zu vermeiden und die Konfiguration wartungsfreundlicher zu gestalten, erstellen Sie die folgenden zwei Konfigurationsausschnitte:

/etc/httpd/conf.d/letsencrypt.conf
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>
/etc/httpd/conf.d/ssl-params.conf
SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off

SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options SAMEORIGIN
Header always set X-Content-Type-Options nosniff

SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"

Das obige Snippet verwendet die von Mozilla empfohlenen Chipper. Es ermöglicht OCSP Stapling, HTTP Strict Transport Security (HSTS), Dh-Schlüssel und erzwingt wenige sicherheitsorientierte HTTP-Header.

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

sudo systemctl reload httpd

Jetzt können Sie das certbot-Skript mit dem Webroot-Plugin ausführen und die SSL-Zertifikatsdateien abrufen:

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

Bei Erfolg druckt certbot die folgende Nachricht:

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 2020-01-26. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto 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

Nachdem alles eingerichtet ist, bearbeiten Sie die Konfiguration Ihres virtuellen Domänenhosts wie folgt:

/etc/httpd/conf.d/example.com.conf
<VirtualHost *:80>
  ServerName example.com
  ServerAlias www.example.com

  Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName example.com
  ServerAlias www.example.com

  Protocols h2 http/1.1

  <If "%{HTTP_HOST} == 'www.example.com'">
    Redirect permanent / https://example.com/
  </If>

  DocumentRoot /var/www/example.com/public_html
  ErrorLog /var/log/httpd/example.com-error.log
  CustomLog /var/log/httpd/example.com-access.log combined

  SSLEngine On
  SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

  # Other Apache Configuration

</VirtualHost>

Die obige Konfiguration erzwingt eine HTTPSand-Umleitung von www zu einer nicht-www-Version. Es ermöglicht auch HTTP/2, wodurch Ihre Websites schneller und robuster werden. Fühlen Sie sich frei, die Konfiguration an Ihre Bedürfnisse anzupassen.

Starten Sie den Apache-Dienst neu:

sudo systemctl restart httpd

Sie können Ihre Website jetzt mit https:// öffnen , und Sie werden ein grünes Schlosssymbol bemerken.

Wenn Sie Ihre Domain mit dem SSL Labs Server Test testen, erhalten Sie die Note A+, wie unten gezeigt:

SSL-Zertifikat von Let’s Encrypt automatisch verlängern #

Die Zertifikate von Let’s Encrypt sind 90 Tage gültig. Um die Zertifikate automatisch zu erneuern, bevor sie ablaufen, erstellen wir einen Cronjob, der zweimal täglich ausgeführt wird und jedes Zertifikat 30 Tage vor seinem Ablauf automatisch verlängert.

Führen Sie den folgenden Befehl aus, um einen neuen Cronjob zu erstellen, der das Zertifikat erneuert und Apache neu startet:

echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto -q renew --renew-hook \"systemctl reload httpd\"" | sudo tee -a /etc/crontab > /dev/null

Verwenden Sie zum Testen des Erneuerungsprozesses den Befehl certbot gefolgt von --dry-run Schalter:

sudo /usr/local/bin/certbot-auto renew --dry-run

Wenn keine Fehler vorliegen, bedeutet dies, dass der Erneuerungsprozess erfolgreich war.


Cent OS
  1. So installieren Sie den Apache-Webserver unter CentOS 7

  2. Sichern Sie Nginx mit Lets Encrypt auf Ubuntu 18.04

  3. Sichern Sie Apache mit Let's Encrypt auf CentOS 7 - Schritt-für-Schritt-Prozess?

  4. So installieren Sie Let’s Encrypt mit Apache unter CentOS 7

  5. So sichern Sie Apache mit Lets Encrypt unter Ubuntu 18.04

Sichern Sie Nginx mit Lets Encrypt auf Debian 9

Sichern Sie Apache mit Lets Encrypt unter Debian 10

So sichern Sie den Apache-Webserver mit Let’s Encrypt auf RHEL 8

So sichern Sie den CentOS 7-Server mit ModSecurity

So sichern Sie Apache mit Let’s Encrypt unter CentOS 8

So sichern Sie Nginx mit Let’s Encrypt unter CentOS 8