Android

Sicherer Apache mit let's encrypt on centos 7

AWS Tutorial For Beginners | AWS Full Course - Learn AWS In 10 Hours | AWS Training | Edureka

AWS Tutorial For Beginners | AWS Full Course - Learn AWS In 10 Hours | AWS Training | Edureka

Inhaltsverzeichnis:

Anonim

Let's Encrypt ist eine kostenlose, automatisierte und offene Zertifizierungsstelle, die von der Internet Security Research Group (ISRG) entwickelt wurde. Von Let's Encrypt ausgestellte Zertifikate sind ab dem Ausstellungsdatum 90 Tage lang gültig und werden heute von allen gängigen Browsern als vertrauenswürdig eingestuft.

In diesem Lernprogramm werden die Schritte beschrieben, die zum Installieren eines kostenlosen Let's Encrypt-SSL-Zertifikats auf einem CentOS 7-Server erforderlich sind, auf dem Apache als Webserver ausgeführt wird. Wir werden das Dienstprogramm certbot verwenden, um Let's Encrypt-Zertifikate abzurufen und zu erneuern.

Voraussetzungen

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

  • Verfügen Sie über einen Domainnamen, der auf Ihre öffentliche Server-IP verweist. Wir werden example.com Apache ist installiert und wird auf Ihrem Server ausgeführt. Haben Sie einen virtuellen Apache-Host für Ihre Domain. 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:

yum install mod_ssl openssl

Installieren Sie Certbot

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

Das certbot-Paket kann ab EPEL installiert werden. Wenn das EPEL-Repository nicht auf Ihrem System installiert ist, können Sie es mit dem folgenden Befehl installieren:

sudo yum install epel-release

Wenn das EPEL-Repository aktiviert ist, installieren Sie das certbot-Paket, indem Sie Folgendes eingeben:

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, 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. 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 .

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

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

Um das Duplizieren von Code zu vermeiden, erstellen Sie die folgenden zwei Konfigurationsschnipsel:

/etc/httpd/conf.d/letsencrypt.conf

Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS /etc/httpd/conf.d/ssl-params.conf

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLHonorCipherOrder On Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff # Requires Apache >= 2.4 SSLCompression off SSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)" # Requires Apache >= 2.4.11 SSLSessionTickets Off

Das obige Snippet verwendet die von Cipherli.st empfohlenen Chipper, aktiviert OCSP-Heftung, HTTP Strict Transport Security (HSTS) und erzwingt einige sicherheitsgerichtete

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

sudo systemctl reload

Jetzt können wir das Certbot-Tool mit dem Webroot-Plugin ausführen und die SSL-Zertifikatsdateien abrufen, indem wir 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-12-07. 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:

CentOS 7 wird mit Apache Version 2.4.6 ausgeliefert, die die Anweisung SSLOpenSSLConfCmd nicht enthält. Diese Direktive ist erst in Apache 2.4.8 verfügbar und wird zur Konfiguration von OpenSSL-Parametern wie Diffie-Hellman-Schlüsselaustausch (DH) verwendet.

Wir müssen eine neue kombinierte Datei mit dem Let's Encrypt SSL-Zertifikat und der generierten DH-Datei erstellen. Geben Sie dazu Folgendes ein:

cat /etc/letsencrypt/live/example.com/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/example.com/cert.dh.pem

Nachdem Sie alles eingerichtet haben, bearbeiten Sie die Konfiguration Ihres virtuellen Domain-Hosts wie folgt:

/etc/httpd/conf.d/example.com.conf

ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ 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/cert.dh.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem # Other Apache Configuration ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ 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/cert.dh.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem # Other Apache Configuration ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ 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/cert.dh.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem # Other Apache Configuration ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ 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/cert.dh.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem # Other Apache Configuration

Mit der obigen Konfiguration erzwingen wir HTTPS und leiten von der WWW-Version zur Nicht-WWW-Version um. Es steht Ihnen frei, die Konfiguration an Ihre Bedürfnisse anzupassen.

Starten Sie den Apache-Dienst neu, damit die Änderungen wirksam werden:

sudo systemctl restart

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

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, der das Zertifikat erneuert, eine neue kombinierte Datei mit dem DH-Schlüssel zu erstellen und Apache neu zu starten:

sudo crontab -e

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

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 Erneuerungsprozess erfolgreich.

Fazit

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

apache centos verschlüsseln wir certbot ssl

Dieser Beitrag ist Teil der Install LAMP Stack-Reihe für CentOS 7.

Andere Beiträge in dieser Reihe:

• Installieren von Apache unter CentOS 7 • Installieren von MySQL unter CentOS 7 • Einrichten von virtuellen Apache-Hosts unter CentOS 7 • Sichern Sie Apache mit Let's Encrypt unter CentOS 7